ajout cabinet+experts
This commit is contained in:
@@ -26,11 +26,6 @@ def get_userAccess(request, logged_in):
|
|||||||
else:
|
else:
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
def get_codespostaux(request, code):
|
|
||||||
query = "SELECT * FROM p_codespostaux WHERE code_postal like :code;"
|
|
||||||
results = request.dbsession.execute(query, {'code': code + "%"})
|
|
||||||
return results.fetchall()
|
|
||||||
|
|
||||||
def get_member_by_mdp_oublie(request, lien):
|
def get_member_by_mdp_oublie(request, lien):
|
||||||
query = "SELECT * FROM p_users WHERE mdp_oublie=:lien;"
|
query = "SELECT * FROM p_users WHERE mdp_oublie=:lien;"
|
||||||
results = request.dbsession.execute(query, {'lien':lien}).first()
|
results = request.dbsession.execute(query, {'lien':lien}).first()
|
||||||
@@ -128,3 +123,8 @@ def get_article(request, type, libelle):
|
|||||||
results = request.dbsession.execute(query, {'ref': libelle}).first()
|
results = request.dbsession.execute(query, {'ref': libelle}).first()
|
||||||
return results
|
return results
|
||||||
|
|
||||||
|
def get_codespostaux(request, codep):
|
||||||
|
query = "SELECT * FROM p_codespostaux WHERE code_postal LIKE :code;"
|
||||||
|
results = request.dbsession.execute(query, {'code': codep+"%"}).fetchall()
|
||||||
|
return results
|
||||||
|
|
||||||
|
|||||||
@@ -44,6 +44,26 @@ def get_dossiers_byChantier(request, societe, name):
|
|||||||
results = request.dbsession.execute(query).fetchall()
|
results = request.dbsession.execute(query).fetchall()
|
||||||
return results
|
return results
|
||||||
|
|
||||||
|
def get_cabinets_by_id(request, code):
|
||||||
|
# lire les cabinets
|
||||||
|
if code == '0':
|
||||||
|
query = """SELECT * FROM P_CABINET WHERE afficher <> 0 ORDER BY nom;"""
|
||||||
|
results = request.dbsession.execute(query).fetchall()
|
||||||
|
else:
|
||||||
|
query = """SELECT * FROM P_CABINET WHERE code=:code;"""
|
||||||
|
results = request.dbsession.execute(query, {'code': code}).first()
|
||||||
|
return results
|
||||||
|
|
||||||
|
def get_experts_by_id(request, code_cab, code_exp):
|
||||||
|
# lire les experts du cabinet
|
||||||
|
if code_exp == '0':
|
||||||
|
query = """SELECT * FROM P_EXPERTS WHERE code_cab=:code_cab AND en_activite <> 0 ORDER BY nom;"""
|
||||||
|
results = request.dbsession.execute(query, {'code_cab': code_cab}).fetchall()
|
||||||
|
else:
|
||||||
|
query = """SELECT * FROM P_EXPERTS WHERE code_cab=:code_cab AND code_exp=:code_exp;"""
|
||||||
|
results = request.dbsession.execute(query, {'code_cab': code_cab}, {'code_exp': code_exp}).first()
|
||||||
|
return results
|
||||||
|
|
||||||
def get_rdf_causes_by_id(request, code):
|
def get_rdf_causes_by_id(request, code):
|
||||||
# lire les rdf_causes
|
# lire les rdf_causes
|
||||||
if code == '0':
|
if code == '0':
|
||||||
|
|||||||
@@ -50,10 +50,13 @@ def includeme(config):
|
|||||||
config.add_route('parametres', '/parametres')
|
config.add_route('parametres', '/parametres')
|
||||||
config.add_route('article_edit', '/article_edit/{ref}')
|
config.add_route('article_edit', '/article_edit/{ref}')
|
||||||
config.add_route('articles', '/articles')
|
config.add_route('articles', '/articles')
|
||||||
|
config.add_route('cabinet_edit', '/cabinet_edit/{code}')
|
||||||
|
config.add_route('cabinets', '/cabinets')
|
||||||
config.add_route('connecter_a', '/connecter_a/{login}')
|
config.add_route('connecter_a', '/connecter_a/{login}')
|
||||||
config.add_route('dashboard', '/dashboard')
|
config.add_route('dashboard', '/dashboard')
|
||||||
config.add_route('emails_msg', '/emails_msg/{nolig}')
|
config.add_route('emails_msg', '/emails_msg/{nolig}')
|
||||||
config.add_route('emails_sent', '/emails_sent')
|
config.add_route('emails_sent', '/emails_sent')
|
||||||
|
config.add_route('expert_edit', '/expert_edit/{code_cab}/{code_exp}')
|
||||||
config.add_route('infrastructure', '/infrastructure')
|
config.add_route('infrastructure', '/infrastructure')
|
||||||
config.add_route('last_emailing', '/last_emailing')
|
config.add_route('last_emailing', '/last_emailing')
|
||||||
config.add_route('orphans_de', '/orphans_de/{societe}')
|
config.add_route('orphans_de', '/orphans_de/{societe}')
|
||||||
|
|||||||
@@ -39,9 +39,9 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="control-label col-sm-2">Libellé</label>
|
<label class="control-label col-sm-2">Désignation</label>
|
||||||
<div class="col-sm-10">
|
<div class="col-sm-10">
|
||||||
<input class="form-control" type="text" id="libelle" name="libelle" value="${ligne.libelle}">
|
<textarea class="form-control monospace-font" rows="3" cols="40" id="libelle" name="libelle">${ligne.libelle}</textarea>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
@@ -81,7 +81,7 @@
|
|||||||
<div class="col-sm-10">
|
<div class="col-sm-10">
|
||||||
<p class="form-control-static">${ligne.ref}</p>
|
<p class="form-control-static">${ligne.ref}</p>
|
||||||
</div>
|
</div>
|
||||||
<label class="control-label col-sm-2">Libellé</label>
|
<label class="control-label col-sm-2">Désignation</label>
|
||||||
<div class="col-sm-10">
|
<div class="col-sm-10">
|
||||||
<p class="form-control-static">${ligne.libelle}</p>
|
<p class="form-control-static">${ligne.libelle}</p>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -32,7 +32,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="col-xs-3 control-label" for="code_postal">Code postal</label>
|
<label class="col-xs-3 control-label" for="code_postal">Code postal - Ville</label>
|
||||||
<div class="col-xs-8">
|
<div class="col-xs-8">
|
||||||
<input class="form-control" type="text" id="code_postal" name="code_postal" value="${code_postal}"
|
<input class="form-control" type="text" id="code_postal" name="code_postal" value="${code_postal}"
|
||||||
placeholder="5 caractères maximum"
|
placeholder="5 caractères maximum"
|
||||||
@@ -76,6 +76,15 @@
|
|||||||
data-fv-emailaddress-message="L'adresse email n'est pas valide" />
|
data-fv-emailaddress-message="L'adresse email n'est pas valide" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-xs-3 control-label">Adresse email 2</label>
|
||||||
|
<div class="col-xs-8">
|
||||||
|
<input class="form-control" type="text" name="C_EMAIL2"
|
||||||
|
value="${dossier.C_EMAIL2}" placeholder="50 caractères maximum"
|
||||||
|
data-fv-emailaddress="true"
|
||||||
|
data-fv-emailaddress-message="L'adresse email n'est pas valide" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="col-xs-3 control-label">Téléphone fixe</label>
|
<label class="col-xs-3 control-label">Téléphone fixe</label>
|
||||||
<div class="col-xs-5">
|
<div class="col-xs-5">
|
||||||
@@ -152,6 +161,8 @@
|
|||||||
<br />
|
<br />
|
||||||
<br />
|
<br />
|
||||||
|
|
||||||
|
<div metal:fill-slot="additional_scripts">
|
||||||
|
<!-- autocomplete plugin -->
|
||||||
<link href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css" rel="stylesheet">
|
<link href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css" rel="stylesheet">
|
||||||
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
|
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
|
||||||
<script>
|
<script>
|
||||||
@@ -177,6 +188,6 @@ $(document).ready(function() {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</metal:block>
|
</metal:block>
|
||||||
|
|||||||
@@ -28,18 +28,16 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="col-sm-4 control-label">Nom ou numéro du chantier</label>
|
<label class="col-sm-4 control-label">Nom ou numéro du chantier</label>
|
||||||
<div class="col-sm-8">
|
<div class="col-sm-7 input-group">
|
||||||
<input type="text" class="form-control" name="name" value="${name}"
|
<input type="text" class="form-control" name="name" value="${name}"
|
||||||
placeholder="Le nom ou le numéro doit avoir de 2 à 30 caractères de long" >
|
placeholder="Le nom ou le numéro doit avoir de 2 à 30 caractères de long" >
|
||||||
|
<div class="input-group-btn">
|
||||||
|
<button id="submitButton" class="btn btn-primary" type="submit" name="form.submitted">
|
||||||
|
<i class="glyphicon glyphicon-search"></i> Rechercher</button>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-group">
|
|
||||||
<div class="col-sm-offset-4 col-sm-8">
|
|
||||||
<button id="submitButton" class="btn btn-primary" type="submit" name="form.submitted">
|
|
||||||
<span class="glyphicon glyphicon-search"></span> Rechercher</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</form>
|
</form>
|
||||||
</div><!-- row -->
|
</div><!-- row -->
|
||||||
@@ -101,15 +99,6 @@
|
|||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
$('#site-search-form').formValidation({
|
|
||||||
framework: 'bootstrap',
|
|
||||||
message: 'This value is not valid',
|
|
||||||
icon: {
|
|
||||||
valid: 'glyphicon glyphicon-ok',
|
|
||||||
invalid: 'glyphicon glyphicon-remove',
|
|
||||||
validating: 'glyphicon glyphicon-refresh'
|
|
||||||
},
|
|
||||||
});
|
|
||||||
$('form input').on('keypress', function(e) {
|
$('form input').on('keypress', function(e) {
|
||||||
var code = e.keyCode || e.which;
|
var code = e.keyCode || e.which;
|
||||||
if (code === 13) {
|
if (code === 13) {
|
||||||
@@ -118,7 +107,6 @@
|
|||||||
document.getElementById("submitButton").click();
|
document.getElementById("submitButton").click();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -17,8 +17,9 @@
|
|||||||
${dossier.C_ADR}<br />
|
${dossier.C_ADR}<br />
|
||||||
<span tal:condition="dossier.C_ADR2">${dossier.C_ADR2}<br /></span>
|
<span tal:condition="dossier.C_ADR2">${dossier.C_ADR2}<br /></span>
|
||||||
${dossier.C_CP} ${dossier.C_VILLE}<br />
|
${dossier.C_CP} ${dossier.C_VILLE}<br />
|
||||||
<span tal:condition="len(dossier.C_EMAIL)">${dossier.C_EMAIL}</span>
|
${dossier.C_EMAIL}
|
||||||
<span tal:condition="len(dossier.C_EMAIL)==0" class="text-danger"><b>!!! Email vide !!!</b></span>
|
<span tal:condition="len(dossier.C_EMAIL)==0" class="text-danger"><b>!!! Email vide !!!</b><br /></span>
|
||||||
|
<span tal:condition="len(dossier.C_EMAIL2)">${dossier.C_EMAIL2}</span>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
@@ -187,7 +188,8 @@
|
|||||||
<div id="tab_documents" class="tab-pane fade">
|
<div id="tab_documents" class="tab-pane fade">
|
||||||
<h3>DEVIS - FACTURES</h3>
|
<h3>DEVIS - FACTURES</h3>
|
||||||
<p>
|
<p>
|
||||||
<a class="btn btn-success" role="button" href="${request.route_url('devis_create', nodossier=nodossier)}">
|
<a class="btn btn-success" role="button" href="${request.route_url('devis_create', nodossier=nodossier)}"
|
||||||
|
tal:condition="logged_in=='CAO'">
|
||||||
<span class="glyphicon glyphicon-plus"></span> Nouveau devis</a>
|
<span class="glyphicon glyphicon-plus"></span> Nouveau devis</a>
|
||||||
</p>
|
</p>
|
||||||
<table class="table table-bordered table-condensed">
|
<table class="table table-bordered table-condensed">
|
||||||
|
|||||||
184
mondumas/templates/parametres/cabinet_edit.pt
Normal file
184
mondumas/templates/parametres/cabinet_edit.pt
Normal file
@@ -0,0 +1,184 @@
|
|||||||
|
<metal:block use-macro="main_template">
|
||||||
|
<div metal:fill-slot="content">
|
||||||
|
|
||||||
|
<div tal:condition="message" tal:content="message" class="alert alert-danger" />
|
||||||
|
<br />
|
||||||
|
<ul class="nav nav-tabs">
|
||||||
|
<li class="active"><a data-toggle="tab" href="#tab_cabinet"><b>CABINET</b></a></li>
|
||||||
|
<li><a data-toggle="tab" href="#tab_experts"><b>EXPERTS</b></a></li>
|
||||||
|
</ul>
|
||||||
|
<!-- PANEL SUIVI -->
|
||||||
|
<div class="tab-content">
|
||||||
|
<div id="tab_cabinet" class="tab-pane fade in active">
|
||||||
|
|
||||||
|
<h3>CABINET</h3>
|
||||||
|
<form id="rdf_cabinet-form" class="form-horizontal" action="${url}" method="post"
|
||||||
|
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-3" for="CODE">Code</label>
|
||||||
|
<div class="col-xs-9">
|
||||||
|
<input class="form-control" type="text" id="CODE" name="CODE" value="${cabinet.CODE}" readonly />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="control-label col-xs-3" for="NOM">Nom</label>
|
||||||
|
<div class="col-xs-9">
|
||||||
|
<input class="form-control" type="text" id="NOM" name="NOM" value="${cabinet.NOM}"
|
||||||
|
placeholder="30 caractères maximum"
|
||||||
|
data-fv-notempty="true"
|
||||||
|
data-fv-notempty-message="Un libellé est obligatoire"
|
||||||
|
data-fv-stringlength="true"
|
||||||
|
data-fv-stringlength-max="30"
|
||||||
|
data-fv-stringlength-message="30 caractères maximum" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-xs-3 control-label" for="ADRESSE">Adresse</label>
|
||||||
|
<div class="col-xs-8">
|
||||||
|
<input class="form-control" type="text" id="ADRESSE" name="ADRESSE" value="${cabinet.ADRESSE}"
|
||||||
|
placeholder="40 caractères maximum"
|
||||||
|
data-fv-stringlength="true"
|
||||||
|
data-fv-stringlength-max="40"
|
||||||
|
data-fv-stringlength-message="40 caractères maximum" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-xs-3 control-label" for="ADRESSE2">Adresse 2</label>
|
||||||
|
<div class="col-xs-8">
|
||||||
|
<input class="form-control" type="text" id="ADRESSE2" name="ADRESSE2" value="${cabinet.ADRESSE2}"
|
||||||
|
placeholder="40 caractères maximum"
|
||||||
|
data-fv-stringlength="true"
|
||||||
|
data-fv-stringlength-max="40"
|
||||||
|
data-fv-stringlength-message="40 caractères maximum" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-xs-3 control-label" for="code_postal">Code postal - Ville</label>
|
||||||
|
<div class="col-xs-8">
|
||||||
|
<input class="form-control" type="text" id="code_postal" name="code_postal" value="${code_postal}"
|
||||||
|
placeholder="5 caractères maximum"
|
||||||
|
data-fv-notempty="true"
|
||||||
|
data-fv-notempty-message="Le code postal est obligatoire" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-xs-3 control-label" for="TEL1">Télphone 1</label>
|
||||||
|
<div class="col-xs-8">
|
||||||
|
<input class="form-control" type="text" name="TEL1" value="${cabinet.TEL1}"
|
||||||
|
placeholder="14 caractères maximum"
|
||||||
|
data-fv-stringlength="true"
|
||||||
|
data-fv-stringlength-max="14"
|
||||||
|
data-fv-stringlength-message="14 caractères maximum" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-xs-3 control-label" for="TEL2">Télphone 2</label>
|
||||||
|
<div class="col-xs-8">
|
||||||
|
<input class="form-control" type="text" name="TEL2" value="${cabinet.TEL2}"
|
||||||
|
placeholder="14 caractères maximum"
|
||||||
|
data-fv-stringlength="true"
|
||||||
|
data-fv-stringlength-max="14"
|
||||||
|
data-fv-stringlength-message="14 caractères maximum" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-xs-3 control-label" for="TELP">Télphone portable</label>
|
||||||
|
<div class="col-xs-8">
|
||||||
|
<input class="form-control" type="text" name="TELP" value="${cabinet.TELP}"
|
||||||
|
placeholder="14 caractères maximum"
|
||||||
|
data-fv-stringlength="true"
|
||||||
|
data-fv-stringlength-max="14"
|
||||||
|
data-fv-stringlength-message="14 caractères maximum" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="col-sm-offset-3 col-sm-9 checkbox">
|
||||||
|
<label><input type="checkbox" name="afficher" value="cabinet.afficher"
|
||||||
|
tal:attributes="checked cabinet.afficher != 0 and 'checked' or None">La fiche est active
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="control-label col-xs-3">Dern. modif le</label>
|
||||||
|
<div class="col-xs-9">
|
||||||
|
<p class="form-control-static">${cabinet.modif_le.strftime('%d-%m-%Y %H:%M')}</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="col-xs-offset-3 col-xs-9">
|
||||||
|
<a class="btn btn-default" href="/cabinets">
|
||||||
|
<span class="glyphicon glyphicon-arrow-left"></span> Annuler</a>
|
||||||
|
<button class="btn btn-primary" type="submit" name="form.submitted">
|
||||||
|
<span class="glyphicon glyphicon-ok"></span> Enregistrer</button>
|
||||||
|
<button class="btn btn-danger" type="submit" name="form.deleted" tal:condition="cabinet.CODE != '0'">
|
||||||
|
<span class="glyphicon glyphicon-remove"></span> Supprimer</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- PANEL EXPERTS -->
|
||||||
|
<div id="tab_experts" class="tab-pane fade">
|
||||||
|
<h3>EXPERTS</h3>
|
||||||
|
<p>
|
||||||
|
<a class="btn btn-success" role="button" href="/expert_edit/${cabinet.CODE}/0">
|
||||||
|
<span class="glyphicon glyphicon-plus"></span> Nouvel expert</a>
|
||||||
|
</p>
|
||||||
|
<table class="table table-bordered table-condensed">
|
||||||
|
<tr>
|
||||||
|
<th>Code</th>
|
||||||
|
<th>Nom expert</th>
|
||||||
|
<th>Tél 1</th>
|
||||||
|
<th>Tél 2</th>
|
||||||
|
<th>Email</th>
|
||||||
|
</tr>
|
||||||
|
<tr tal:repeat="expert experts">
|
||||||
|
<td>${expert.CODE_EXP}</td>
|
||||||
|
<td>
|
||||||
|
<a href="/expert_edit/${expert.CODE_CAB}/${expert.CODE_EXP}">${expert.NOM}</a>
|
||||||
|
</td>
|
||||||
|
<td>${expert.TEL1}</td>
|
||||||
|
<td>${expert.TEL2}</td>
|
||||||
|
<td>${expert.email}</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<br />
|
||||||
|
<br />
|
||||||
|
<br />
|
||||||
|
|
||||||
|
<link href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css" rel="stylesheet">
|
||||||
|
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
|
||||||
|
<script>
|
||||||
|
$(document).ready(function() {
|
||||||
|
$('#rdf_cabinet-form').formValidation();
|
||||||
|
$('form input').on('keypress', function(e) {
|
||||||
|
return e.which !== 13;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
$('#code_postal').autocomplete({
|
||||||
|
source: function (request, response) {
|
||||||
|
$.ajax({
|
||||||
|
url:'/ajax_codepostal',
|
||||||
|
dataType: 'json',
|
||||||
|
data: {
|
||||||
|
recherche: request.term,
|
||||||
|
},
|
||||||
|
success: function (data) {
|
||||||
|
response( data );
|
||||||
|
},
|
||||||
|
});
|
||||||
|
},
|
||||||
|
minLength: 3,
|
||||||
|
});
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</metal:block>
|
||||||
57
mondumas/templates/parametres/cabinets.pt
Normal file
57
mondumas/templates/parametres/cabinets.pt
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
<metal:block use-macro="main_template">
|
||||||
|
<div metal:fill-slot="content">
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<a href="${request.application_url}/parametres" class="btn btn-default" role="button">
|
||||||
|
<span class="glyphicon glyphicon-chevron-left"></span> Retour</a>
|
||||||
|
<a href="${request.application_url}/cabinet_edit/0" class="btn btn-success" role="button">
|
||||||
|
<span class="glyphicon glyphicon-plus"></span> Nouvelle cause</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<table id="cabinets" class="table table-striped table-bordered table-condensed">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Code</th>
|
||||||
|
<th>Nom</th>
|
||||||
|
<th>Tél. 1</th>
|
||||||
|
<th>Tél. 2</th>
|
||||||
|
<th>Portable</th>
|
||||||
|
<th>Ville</th>
|
||||||
|
<th>Modif le</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');
|
||||||
|
$('#cabinets').DataTable({
|
||||||
|
data: dataSet,
|
||||||
|
pageLength: 50,
|
||||||
|
bLengthChange: false,
|
||||||
|
language: {
|
||||||
|
url: 'https://cdn.datatables.net/plug-ins/1.10.16/i18n/French.json'
|
||||||
|
},
|
||||||
|
order: [[ 1, "asc" ]],
|
||||||
|
columnDefs: [
|
||||||
|
{ targets: 1,
|
||||||
|
"render": function (data, type, row, meta) {
|
||||||
|
// ajouter un link vers la fiche élève
|
||||||
|
return '<a href="/cabinet_edit/' + row[0] + '">' + data + '</a>';
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</div><!-- content -->
|
||||||
|
</metal:block>
|
||||||
|
|
||||||
|
|
||||||
116
mondumas/templates/parametres/expert_edit.pt
Normal file
116
mondumas/templates/parametres/expert_edit.pt
Normal file
@@ -0,0 +1,116 @@
|
|||||||
|
<metal:block use-macro="main_template">
|
||||||
|
<div metal:fill-slot="content">
|
||||||
|
|
||||||
|
<div tal:condition="message" tal:content="message" class="alert alert-danger" />
|
||||||
|
<br />
|
||||||
|
<form id="rdf_cabinet-form" class="form-horizontal" action="${url}" method="post"
|
||||||
|
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-3" for="CODE">Code</label>
|
||||||
|
<div class="col-xs-9">
|
||||||
|
<input class="form-control" type="text" id="CODE" name="CODE" value="${expert.CODE}" readonly />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="control-label col-xs-3" for="NOM">Nom</label>
|
||||||
|
<div class="col-xs-9">
|
||||||
|
<input class="form-control" type="text" id="NOM" name="NOM" value="${expert.NOM}"
|
||||||
|
placeholder="30 caractères maximum"
|
||||||
|
data-fv-notempty="true"
|
||||||
|
data-fv-notempty-message="Un libellé est obligatoire"
|
||||||
|
data-fv-stringlength="true"
|
||||||
|
data-fv-stringlength-max="30"
|
||||||
|
data-fv-stringlength-message="30 caractères maximum" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-xs-3 control-label" for="TEL1">Télphone 1</label>
|
||||||
|
<div class="col-xs-8">
|
||||||
|
<input class="form-control" type="text" name="TEL1" value="${expert.TEL1}"
|
||||||
|
placeholder="14 caractères maximum"
|
||||||
|
data-fv-stringlength="true"
|
||||||
|
data-fv-stringlength-max="14"
|
||||||
|
data-fv-stringlength-message="14 caractères maximum" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-xs-3 control-label" for="TEL2">Portable</label>
|
||||||
|
<div class="col-xs-8">
|
||||||
|
<input class="form-control" type="text" name="TEL2" value="${expert.TEL2}"
|
||||||
|
placeholder="14 caractères maximum"
|
||||||
|
data-fv-stringlength="true"
|
||||||
|
data-fv-stringlength-max="14"
|
||||||
|
data-fv-stringlength-message="14 caractères maximum" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-xs-3 control-label" for="email">Email</label>
|
||||||
|
<div class="col-xs-8">
|
||||||
|
<input class="form-control" type="text" name="email" value="${expert.email}"
|
||||||
|
placeholder="50 caractères maximum"
|
||||||
|
data-fv-emailaddress="true"
|
||||||
|
data-fv-emailaddress-message="L'adresse email n'est pas valide" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="col-sm-offset-3 col-xs-9 checkbox">
|
||||||
|
<label><input type="checkbox" name="afficher" value="expert.en_activite"
|
||||||
|
tal:attributes="checked expert.en_activite != 0 and 'checked' or None">La fiche est active
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="control-label col-xs-3">Dern. modif le</label>
|
||||||
|
<div class="col-xs-9">
|
||||||
|
<p class="form-control-static">${expert.modif_le.strftime('%d-%m-%Y %H:%M')}</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="col-xs-offset-3 col-xs-9">
|
||||||
|
<a class="btn btn-default" href="/cabinets">
|
||||||
|
<span class="glyphicon glyphicon-arrow-left"></span> Annuler</a>
|
||||||
|
<button class="btn btn-primary" type="submit" name="form.submitted">
|
||||||
|
<span class="glyphicon glyphicon-ok"></span> Enregistrer</button>
|
||||||
|
<button class="btn btn-danger" type="submit" name="form.deleted" tal:condition="expert.CODE != '0'">
|
||||||
|
<span class="glyphicon glyphicon-remove"></span> Supprimer</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
<br />
|
||||||
|
<br />
|
||||||
|
<br />
|
||||||
|
|
||||||
|
<link href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css" rel="stylesheet">
|
||||||
|
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
|
||||||
|
<script>
|
||||||
|
$(document).ready(function() {
|
||||||
|
$('#rdf_cabinet-form').formValidation();
|
||||||
|
$('form input').on('keypress', function(e) {
|
||||||
|
return e.which !== 13;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
$('#code_postal').autocomplete({
|
||||||
|
source: function (request, response) {
|
||||||
|
$.ajax({
|
||||||
|
url:'/ajax_codepostal',
|
||||||
|
dataType: 'json',
|
||||||
|
data: {
|
||||||
|
recherche: request.term,
|
||||||
|
},
|
||||||
|
success: function (data) {
|
||||||
|
response( data );
|
||||||
|
},
|
||||||
|
});
|
||||||
|
},
|
||||||
|
minLength: 3,
|
||||||
|
});
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</metal:block>
|
||||||
@@ -21,6 +21,13 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<br />
|
<br />
|
||||||
|
<div class="row text-center">
|
||||||
|
<div class="col-sm-3">
|
||||||
|
<a href="${request.application_url}/cabinets"><span class="glyphicon glyphicon-list logo-primary"></span></a>
|
||||||
|
<h4>CABINETS EXP.</h4>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<br />
|
||||||
<div class="row text-center">
|
<div class="row text-center">
|
||||||
<div class="col-sm-3">
|
<div class="col-sm-3">
|
||||||
<a href="${request.application_url}/dashboard"><span class="glyphicon glyphicon-dashboard logo-primary"></span></a>
|
<a href="${request.application_url}/dashboard"><span class="glyphicon glyphicon-dashboard logo-primary"></span></a>
|
||||||
|
|||||||
@@ -276,7 +276,7 @@ def ajax_codepostal(request):
|
|||||||
|
|
||||||
# lire les codes postaux commencant par
|
# lire les codes postaux commencant par
|
||||||
items = get_codespostaux(request, recherche)
|
items = get_codespostaux(request, recherche)
|
||||||
|
# import pdb;pdb.set_trace()
|
||||||
liste=[]
|
liste=[]
|
||||||
for row in items:
|
for row in items:
|
||||||
d = row.code_postal + " - " + row.libelle
|
d = row.code_postal + " - " + row.libelle
|
||||||
|
|||||||
@@ -144,10 +144,9 @@ def devis_web(request):
|
|||||||
'page-size': 'A4',
|
'page-size': 'A4',
|
||||||
'margin-top': '1cm',
|
'margin-top': '1cm',
|
||||||
'margin-right': '1cm',
|
'margin-right': '1cm',
|
||||||
'margin-bottom': '1cm',
|
'margin-bottom': '2cm',
|
||||||
'margin-left': '1cm',
|
'margin-left': '1.5cm',
|
||||||
'footer-font-size':'7',
|
'footer-font-size':'7',
|
||||||
'footer-center': soc.code_ape,
|
|
||||||
'footer-right': '[page] / [topage]',
|
'footer-right': '[page] / [topage]',
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -336,9 +335,9 @@ def devis_preview(request):
|
|||||||
if ligne.ref == 'T1':
|
if ligne.ref == 'T1':
|
||||||
dt_html += '<tr><td colspan="3" style="text-align:center;"><h4>%s</h4></td></tr>' % ligne.libelle
|
dt_html += '<tr><td colspan="3" style="text-align:center;"><h4>%s</h4></td></tr>' % ligne.libelle
|
||||||
elif ligne.ref == 'T2':
|
elif ligne.ref == 'T2':
|
||||||
dt_html += '<tr><td colspan="3"><p><b>%s</b></p></td></tr>' % ligne.libelle
|
dt_html += '<tr><td colspan="3" style="text-align:center;"><p><b>%s</b></p></td></tr>' % ligne.libelle
|
||||||
elif ligne.ref == 'TX':
|
elif ligne.ref == 'TX':
|
||||||
dt_html += '<tr><td colspan="3"><p>%s</p></td></tr>' % ligne.libelle
|
dt_html += '<tr><td></td><td colspan="3"><p>%s</p></td></tr>' % ligne.libelle
|
||||||
elif ligne.type_ligne == 'AR':
|
elif ligne.type_ligne == 'AR':
|
||||||
dt_html += '<tr><td style="vertical-align: top">%s</td>' % ligne.ref
|
dt_html += '<tr><td style="vertical-align: top">%s</td>' % ligne.ref
|
||||||
dt_html += '<td><p>%s<br />' % ligne.libelle
|
dt_html += '<td><p>%s<br />' % ligne.libelle
|
||||||
|
|||||||
@@ -134,6 +134,7 @@ def dossier_view(request):
|
|||||||
return {
|
return {
|
||||||
'page_title': "Dossier : %s" % (nodossier),
|
'page_title': "Dossier : %s" % (nodossier),
|
||||||
'url': url,
|
'url': url,
|
||||||
|
'logged_in': logged_in,
|
||||||
'nodossier': nodossier,
|
'nodossier': nodossier,
|
||||||
'dossier': dossier,
|
'dossier': dossier,
|
||||||
'details': details,
|
'details': details,
|
||||||
@@ -606,10 +607,10 @@ def rdf_view(request):
|
|||||||
# import pdb;pdb.set_trace()
|
# import pdb;pdb.set_trace()
|
||||||
options = {
|
options = {
|
||||||
'page-size': 'A4',
|
'page-size': 'A4',
|
||||||
'margin-top': '2cm',
|
'margin-top': '1cm',
|
||||||
'margin-right': '2cm',
|
'margin-right': '1cm',
|
||||||
'margin-bottom': '3cm',
|
'margin-bottom': '2cm',
|
||||||
'margin-left': '2cm',
|
'margin-left': '1.5cm',
|
||||||
'footer-font-size':'7',
|
'footer-font-size':'7',
|
||||||
'footer-right': '[page] / [topage]',
|
'footer-right': '[page] / [topage]',
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -279,7 +279,7 @@ def rdf_causes(request):
|
|||||||
'dt_data': json.dumps(liste),
|
'dt_data': json.dumps(liste),
|
||||||
}
|
}
|
||||||
|
|
||||||
@view_config(route_name='rdf_cause_edit', renderer='../templates/parametres/rdf_cause_edit.pt', permission='view')
|
@view_config(route_name='rdf_cause_edit', renderer='../templates/parametres/rdf_cause_edit.pt', permission='manage')
|
||||||
def rdf_cause_edit(request):
|
def rdf_cause_edit(request):
|
||||||
|
|
||||||
logged_in = request.authenticated_userid
|
logged_in = request.authenticated_userid
|
||||||
@@ -528,3 +528,135 @@ def article_edit(request):
|
|||||||
'message': message,
|
'message': message,
|
||||||
'item': item,
|
'item': item,
|
||||||
'familles': familles,
|
'familles': familles,
|
||||||
|
}
|
||||||
|
|
||||||
|
@view_config(route_name='cabinets', renderer='../templates/parametres/cabinets.pt', permission='view')
|
||||||
|
def cabinets(request):
|
||||||
|
|
||||||
|
# lire les CABINETS
|
||||||
|
items = get_cabinets_by_id(request, '0')
|
||||||
|
|
||||||
|
# construire la liste
|
||||||
|
liste=[]
|
||||||
|
for item in items:
|
||||||
|
modif_le = item.modif_le.strftime('%d/%m/%Y')
|
||||||
|
d = (item.CODE, item.NOM, item.TEL1, item.TEL2, item.TELP, item.VILLE, modif_le)
|
||||||
|
liste.append(d)
|
||||||
|
|
||||||
|
|
||||||
|
return {
|
||||||
|
'page_title': 'Liste des cabinets',
|
||||||
|
'dt_data': json.dumps(liste),
|
||||||
|
}
|
||||||
|
|
||||||
|
@view_config(route_name='cabinet_edit', renderer='../templates/parametres/cabinet_edit.pt', permission='view')
|
||||||
|
def cabinet_edit(request):
|
||||||
|
|
||||||
|
logged_in = request.authenticated_userid
|
||||||
|
code = request.matchdict['code']
|
||||||
|
url = request.route_url("cabinet_edit", code=code)
|
||||||
|
|
||||||
|
message = ''
|
||||||
|
if code == '0':
|
||||||
|
# nouveau
|
||||||
|
cabinet = {}
|
||||||
|
cabinet['CODE'] = ''
|
||||||
|
cabinet['NOM'] = ''
|
||||||
|
cabinet['TEL1'] = ''
|
||||||
|
cabinet['TEL2'] = ''
|
||||||
|
cabinet['TELP'] = ''
|
||||||
|
cabinet['ADR'] = ''
|
||||||
|
cabinet['ADR2'] = ''
|
||||||
|
cabinet['CP'] = ''
|
||||||
|
cabinet['VILLE'] = ''
|
||||||
|
cabinet['afficher'] = 0
|
||||||
|
cabinet['modif_le'] = datetime.now()
|
||||||
|
page_title= 'Nouveau cabinet'
|
||||||
|
else:
|
||||||
|
# lire cabinets
|
||||||
|
cabinet = get_cabinets_by_id(request, code)
|
||||||
|
if not cabinet:
|
||||||
|
request.session.flash(u"Cabinet non trouvé : %s" % code, 'warning')
|
||||||
|
return HTTPFound(location=request.route_url('cabinets'))
|
||||||
|
|
||||||
|
page_title= "Modification de %s" % (cabinet.NOM)
|
||||||
|
code_postal = '%s - %s' % (cabinet.CP, cabinet.VILLE)
|
||||||
|
experts = get_experts_by_id(request, cabinet.CODE, '0')
|
||||||
|
|
||||||
|
if 'form.submitted' in request.params:
|
||||||
|
code = request.params['code']
|
||||||
|
libelle = request.params['libelle']
|
||||||
|
|
||||||
|
update_cabinet(request, code, libelle)
|
||||||
|
request.session.flash(u"Le cabinet a été mis à jour avec succès.", 'success')
|
||||||
|
return HTTPFound(location=request.route_url('cabinets'))
|
||||||
|
|
||||||
|
if 'form.deleted' in request.params:
|
||||||
|
delete_cabinet(request, code)
|
||||||
|
request.session.flash(u"Le cabinet a été supprimé avec succès.", 'success')
|
||||||
|
return HTTPFound(location=request.route_url('cabinets'))
|
||||||
|
|
||||||
|
return {
|
||||||
|
'page_title': page_title,
|
||||||
|
'url': url,
|
||||||
|
'cabinet': cabinet,
|
||||||
|
'experts': experts,
|
||||||
|
'code_postal': code_postal,
|
||||||
|
'message': message,
|
||||||
|
}
|
||||||
|
|
||||||
|
@view_config(route_name='expert_edit', renderer='../templates/parametres/expert_edit.pt', permission='view')
|
||||||
|
def expert_edit(request):
|
||||||
|
|
||||||
|
logged_in = request.authenticated_userid
|
||||||
|
code_cab = request.matchdict['code_cab']
|
||||||
|
code_exp = request.matchdict['code_exp']
|
||||||
|
url = request.route_url("expert_edit", code_cab=code_cab, code_exp=code_exp)
|
||||||
|
|
||||||
|
message = ''
|
||||||
|
if code_exp == '0':
|
||||||
|
# nouveau
|
||||||
|
expert = {}
|
||||||
|
expert['CODE'] = ''
|
||||||
|
expert['NOM'] = ''
|
||||||
|
expert['TEL1'] = ''
|
||||||
|
expert['TEL2'] = ''
|
||||||
|
expert['TELP'] = ''
|
||||||
|
expert['ADR'] = ''
|
||||||
|
expert['ADR2'] = ''
|
||||||
|
expert['CP'] = ''
|
||||||
|
expert['VILLE'] = ''
|
||||||
|
expert['afficher'] = 0
|
||||||
|
expert['modif_le'] = datetime.now()
|
||||||
|
page_title= 'Nouveau expert'
|
||||||
|
else:
|
||||||
|
# lire experts
|
||||||
|
expert = get_experts_by_id(request, code)
|
||||||
|
if not expert:
|
||||||
|
request.session.flash(u"expert non trouvé : %s" % code, 'warning')
|
||||||
|
return HTTPFound(location=request.route_url('experts'))
|
||||||
|
|
||||||
|
page_title= "Modification de %s" % (expert.NOM)
|
||||||
|
code_postal = '%s - %s' % (expert.CP, expert.VILLE)
|
||||||
|
experts = get_experts_by_id(request, expert.CODE, '0')
|
||||||
|
|
||||||
|
if 'form.submitted' in request.params:
|
||||||
|
code = request.params['code']
|
||||||
|
libelle = request.params['libelle']
|
||||||
|
|
||||||
|
update_expert(request, code, libelle)
|
||||||
|
request.session.flash(u"Le expert a été mis à jour avec succès.", 'success')
|
||||||
|
return HTTPFound(location=request.route_url('experts'))
|
||||||
|
|
||||||
|
if 'form.deleted' in request.params:
|
||||||
|
delete_expert(request, code)
|
||||||
|
request.session.flash(u"Le expert a été supprimé avec succès.", 'success')
|
||||||
|
return HTTPFound(location=request.route_url('experts'))
|
||||||
|
|
||||||
|
return {
|
||||||
|
'page_title': page_title,
|
||||||
|
'url': url,
|
||||||
|
'expert': expert,
|
||||||
|
'experts': experts,
|
||||||
|
'code_postal': code_postal,
|
||||||
|
'message': message,
|
||||||
|
|||||||
@@ -20,16 +20,16 @@ pyramid.includes =
|
|||||||
sqlalchemy.url = mysql://phuoc:phuoc!@192.168.0.31/bddevfac?charset=utf8
|
sqlalchemy.url = mysql://phuoc:phuoc!@192.168.0.31/bddevfac?charset=utf8
|
||||||
sqlalchemy.pool_recycle = 3600
|
sqlalchemy.pool_recycle = 3600
|
||||||
|
|
||||||
mondumas.admin_email = sas.dumas@orange.fr
|
mondumas.admin_email = no-reply@entreprise-dumas.co
|
||||||
mondumas.devfac_url = mondumas:static/DEVFAC/
|
mondumas.devfac_url = mondumas:static/DEVFAC/
|
||||||
mondumas.devfac_dir = /DEVFAC14/DOCS_ATTACHES
|
mondumas.devfac_dir = /DEVFAC14/DOCS_ATTACHES
|
||||||
|
|
||||||
# Mailer configuration
|
# Mailer configuration
|
||||||
mail.host = smtp.orange.fr
|
mail.host = v5.alinto.netc
|
||||||
mail.port = 465
|
mail.port = 465
|
||||||
mail.username = sas.dumas@orange.fr
|
mail.username = sasdumas@entreprise-dumas.com
|
||||||
mail.password = sasdumas
|
mail.password = Sasdumas69
|
||||||
mail.ssl = yes
|
mail.ssl = True
|
||||||
|
|
||||||
[server:main]
|
[server:main]
|
||||||
use = egg:waitress#main
|
use = egg:waitress#main
|
||||||
|
|||||||
Reference in New Issue
Block a user