ajout orhan_de.pt
This commit is contained in:
@@ -32,3 +32,25 @@ def get_last_emailing(request):
|
|||||||
results = request.dbsession.execute(query, {})
|
results = request.dbsession.execute(query, {})
|
||||||
return results.fetchall()
|
return results.fetchall()
|
||||||
|
|
||||||
|
def get_orphans_DE(request, societe):
|
||||||
|
|
||||||
|
query = "SELECT * FROM devis WHERE societe = '%s' AND nochantier = 0 ORDER BY date desc LIMIT 50 ;" % (societe)
|
||||||
|
results = request.dbsession.execute(query).first()
|
||||||
|
return results
|
||||||
|
|
||||||
|
def get_dossiers_byChantier(request, societe, name):
|
||||||
|
|
||||||
|
query = "CALL spGET_DOSSIERS_byChantier('%s','%s','%s');" % (societe, 'DE', name.replace("'","''"))
|
||||||
|
results = request.dbsession.execute(query).fetchall()
|
||||||
|
return results
|
||||||
|
|
||||||
|
def update_nochantier(request, societe, nodossier, nochantier):
|
||||||
|
x = nodossier.split('-')
|
||||||
|
type = x[0]
|
||||||
|
no_id = int(x[1])
|
||||||
|
|
||||||
|
if type == 'DE':
|
||||||
|
query = "UPDATE devis SET nochantier = :nochantier WHERE societe = :societe and no_id = :no_id;"
|
||||||
|
else:
|
||||||
|
query = "UPDATE facture SET nochantier = :nochantier WHERE societe = :societe and no_id = :no_id;"
|
||||||
|
execute_query(request, query, {'societe': societe, 'no_id': no_id, 'nochantier': nochantier})
|
||||||
|
|||||||
@@ -15,5 +15,6 @@ def includeme(config):
|
|||||||
config.add_route('parametres', '/parametres')
|
config.add_route('parametres', '/parametres')
|
||||||
config.add_route('dashboard', '/dashboard')
|
config.add_route('dashboard', '/dashboard')
|
||||||
config.add_route('last_emailing', '/last_emailing')
|
config.add_route('last_emailing', '/last_emailing')
|
||||||
|
config.add_route('orphans_de', '/orphans_de')
|
||||||
config.add_route('user_edit', '/user_edit/{cd_uti}')
|
config.add_route('user_edit', '/user_edit/{cd_uti}')
|
||||||
config.add_route('users_list', '/users_list')
|
config.add_route('users_list', '/users_list')
|
||||||
|
|||||||
@@ -14,6 +14,7 @@
|
|||||||
<link href="//cdnjs.cloudflare.com/ajax/libs/fullcalendar-scheduler/1.9.4/scheduler.min.css" rel="stylesheet">
|
<link href="//cdnjs.cloudflare.com/ajax/libs/fullcalendar-scheduler/1.9.4/scheduler.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="//cdnjs.cloudflare.com/ajax/libs/datatables/1.10.18/css/dataTables.bootstrap.min.css" rel="stylesheet" media="all">
|
<link href="//cdnjs.cloudflare.com/ajax/libs/datatables/1.10.18/css/dataTables.bootstrap.min.css" rel="stylesheet" media="all">
|
||||||
|
<link href="//gyrocode.github.io/jquery-datatables-checkboxes/1.2.11/css/dataTables.checkboxes.css" rel="stylesheet" />
|
||||||
<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">
|
||||||
@@ -33,6 +34,7 @@
|
|||||||
<!-- Datatable -->
|
<!-- Datatable -->
|
||||||
<script src="//cdn.datatables.net/1.10.18/js/jquery.dataTables.min.js"></script>
|
<script src="//cdn.datatables.net/1.10.18/js/jquery.dataTables.min.js"></script>
|
||||||
<script src="//cdn.datatables.net/1.10.18/js/dataTables.bootstrap.min.js"></script>
|
<script src="//cdn.datatables.net/1.10.18/js/dataTables.bootstrap.min.js"></script>
|
||||||
|
<script src="//gyrocode.github.io/jquery-datatables-checkboxes/1.2.11/js/dataTables.checkboxes.min.js"></script>
|
||||||
<script src="//cdn.datatables.net/plug-ins/1.10.19/sorting/datetime-moment.js"></script>
|
<script src="//cdn.datatables.net/plug-ins/1.10.19/sorting/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>
|
||||||
|
|||||||
156
mondumas/templates/parametres/orphans_de.pt
Normal file
156
mondumas/templates/parametres/orphans_de.pt
Normal file
@@ -0,0 +1,156 @@
|
|||||||
|
<metal:block use-macro="main_template">
|
||||||
|
<div metal:fill-slot="content">
|
||||||
|
|
||||||
|
<div class="alert alert-danger" tal:condition="message" tal:content="message" />
|
||||||
|
|
||||||
|
<form method="POST" id="frm" class="form-horizontal">
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="control-label col-xs-2" for="societe">Societe</label>
|
||||||
|
<div class="col-xs-6">
|
||||||
|
<select class="form-control" id="societe" name="societe" onChange="$('#frm').submit()">
|
||||||
|
<div tal:repeat="item societes">
|
||||||
|
<option value="${item}" tal:attributes="selected societe==item and 'selected' or None">${item}</option>
|
||||||
|
</div>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- ENTETE -->
|
||||||
|
<div class="row">
|
||||||
|
<!-- CHANTIER -->
|
||||||
|
<div class="col-md-6">
|
||||||
|
<table class="table table-condensed ">
|
||||||
|
<tr>
|
||||||
|
<td><h4>CHANTIER</h4></td>
|
||||||
|
<td>
|
||||||
|
<h4>${devis.C_QUALITE} ${devis.C_NOM}</h4>
|
||||||
|
${devis.C_ADR}<br />
|
||||||
|
<span tal:condition="devis.C_ADR2">${devis.C_ADR2}<br /></span>
|
||||||
|
${devis.C_CP} ${devis.C_VILLE}<br />
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
Police<br />
|
||||||
|
Sinistre<br />
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
${devis.NOPOL}<br />
|
||||||
|
${devis.NOSIN}<br />
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-6">
|
||||||
|
<table class="table table-condensed ">
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<h4>CLIENT</h4>
|
||||||
|
NO DEVIS<br />
|
||||||
|
DATE<br />
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<h4>${devis.NOMCLI}</h4>
|
||||||
|
${devis.NO_ID}<br />
|
||||||
|
${devis.DATE.strftime('%d-%m-%Y')}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div> <!-- row -->
|
||||||
|
|
||||||
|
<form id="frm-nochantier" action="${url}" method="POST" class="form-horizontal">
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="control-label col-xs-2" for="societe">No chantier</label>
|
||||||
|
<div class="col-xs-2">
|
||||||
|
<select class="form-control" id="nochantier" name="nochantier">
|
||||||
|
<div tal:repeat="item nochantiers">
|
||||||
|
<option value="${item}" tal:attributes="selected nochantier == item and 'selected' or None">${item}</option>
|
||||||
|
</div>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-8">
|
||||||
|
<button class="btn btn-primary" type="submit" name="form.nochantier">
|
||||||
|
<span class="glyphicon glyphicon-pencil"></span> MAJ No chantier</button>
|
||||||
|
(Veuillez cocher un ou plusieurs dossiers pour mettre à jour leur no de chantier)
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
<table id="dossiers_list" class="table table-bordered">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th></th>
|
||||||
|
<th>Numéro</th>
|
||||||
|
<th>Date</th>
|
||||||
|
<th>Client</th>
|
||||||
|
<th>Chantier</th>
|
||||||
|
<th class="text-right">Montant</th>
|
||||||
|
<th>Sinistre</th>
|
||||||
|
<th class="text-center">Ch.</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
</table>
|
||||||
|
<br />
|
||||||
|
<br />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
var dataSet = ${dt_data};
|
||||||
|
|
||||||
|
$(document).ready(function() {
|
||||||
|
$.fn.dataTable.moment('DD-MM-YYYY');
|
||||||
|
var table = $('#dossiers_list').DataTable({
|
||||||
|
data: dataSet,
|
||||||
|
pageLength: 20,
|
||||||
|
bLengthChange: false,
|
||||||
|
searching: false,
|
||||||
|
language: {
|
||||||
|
url: 'https://cdn.datatables.net/plug-ins/1.10.16/i18n/French.json'
|
||||||
|
},
|
||||||
|
columnDefs: [
|
||||||
|
{ className: "text-center", "targets": [0] },
|
||||||
|
{ className: "text-right", "targets": [5] },
|
||||||
|
{ 'targets': 0,
|
||||||
|
'checkboxes': {
|
||||||
|
'selectRow': true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
],
|
||||||
|
select: {
|
||||||
|
'style': 'multi'
|
||||||
|
},
|
||||||
|
order: [[2, 'asc']],
|
||||||
|
createdRow: function( row, data, dataIndex ) {
|
||||||
|
if ( data[0].slice(0,2) == "DD" ) {
|
||||||
|
$('td', row).eq(7).css('background-color', 'Orange');
|
||||||
|
}
|
||||||
|
},
|
||||||
|
});
|
||||||
|
// Handle form submission event
|
||||||
|
$('#frm-nochantier').on('submit', function(e){
|
||||||
|
var form = this;
|
||||||
|
var rows_selected = table.column(0).checkboxes.selected();
|
||||||
|
|
||||||
|
// Iterate over all selected checkboxes
|
||||||
|
$.each(rows_selected, function(index, rowId){
|
||||||
|
// alert("row selected :"+ index + "rowId "+ rowId);
|
||||||
|
|
||||||
|
// Create a hidden element
|
||||||
|
$(form).append(
|
||||||
|
$('<input>')
|
||||||
|
.attr('type', 'hidden')
|
||||||
|
.attr('name', 'id' + index)
|
||||||
|
.val(rowId)
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</metal:block>
|
||||||
@@ -11,6 +11,10 @@
|
|||||||
<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>
|
||||||
<h4>TABLEAU de BORD</h4>
|
<h4>TABLEAU de BORD</h4>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="col-sm-3">
|
||||||
|
<a href="${request.application_url}/orphans_de"><span class="glyphicon glyphicon-wrench logo-primary"></span></a>
|
||||||
|
<h4>DEVIS ORPHELINS</h4>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<br />
|
<br />
|
||||||
<br />
|
<br />
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ import json
|
|||||||
|
|
||||||
from ..models.parametres import *
|
from ..models.parametres import *
|
||||||
from ..models.default import *
|
from ..models.default import *
|
||||||
|
from ..views.default import *
|
||||||
|
|
||||||
@view_config(route_name='parametres', renderer='../templates/parametres/parametres.pt', permission='manage')
|
@view_config(route_name='parametres', renderer='../templates/parametres/parametres.pt', permission='manage')
|
||||||
def parametres(request):
|
def parametres(request):
|
||||||
@@ -163,3 +164,54 @@ def last_emailing(request):
|
|||||||
'page_title': u'Liste des derniers emailing',
|
'page_title': u'Liste des derniers emailing',
|
||||||
'dt_data': json.dumps(liste),
|
'dt_data': json.dumps(liste),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@view_config(route_name='orphans_de', renderer='../templates/parametres/orphans_de.pt', permission='manage')
|
||||||
|
def orphans_de(request):
|
||||||
|
|
||||||
|
url = request.route_url('orphans_de')
|
||||||
|
message = u''
|
||||||
|
societes = ['PE','ME','PL','PO','CD']
|
||||||
|
societe = 'PE'
|
||||||
|
|
||||||
|
# prendre en compte les paramètres de saisie
|
||||||
|
if 'societe' in request.params:
|
||||||
|
societe = request.params["societe"]
|
||||||
|
|
||||||
|
if 'form.nochantier' in request.params:
|
||||||
|
message = ''
|
||||||
|
nochantier = request.params['nochantier']
|
||||||
|
|
||||||
|
# oui, NestedMultiDict([('form.submitted', u''), ('id0', u'271246'), ('id1', u'370929')])
|
||||||
|
for param in request.params:
|
||||||
|
if param[:2] == 'id':
|
||||||
|
update_nochantier(request, societe, request.params[param], int(nochantier))
|
||||||
|
message = u"Le numéro de chantier est mis à jour avec succès"
|
||||||
|
|
||||||
|
# lire le premier devis orphelin
|
||||||
|
devis = get_orphans_DE(request, societe)
|
||||||
|
|
||||||
|
# lire tous les dossiers de ce chantier
|
||||||
|
dossiers = get_dossiers_byChantier(request, societe, '%s;%s;%s' % (devis.C_NOM, devis.C_ADR, devis.C_VILLE))
|
||||||
|
liste=[]
|
||||||
|
nochantiers=[]
|
||||||
|
# construire la liste
|
||||||
|
for item in dossiers:
|
||||||
|
dossier_id = '%s-%s' % (item.TYPE, item.numero)
|
||||||
|
if item.nochantier != 0:
|
||||||
|
nochantiers.append(item.nochantier)
|
||||||
|
nochantier = item.nochantier
|
||||||
|
d = (dossier_id, dossier_id, item.date.strftime('%d-%m-%Y'), item.nomcli, item.chantier, to_euro(item.montant),
|
||||||
|
item.nosin, item.nochantier)
|
||||||
|
liste.append(d)
|
||||||
|
|
||||||
|
return {
|
||||||
|
'page_title': u"DEVIS orphelins",
|
||||||
|
'url': url,
|
||||||
|
'message': message,
|
||||||
|
'devis': devis,
|
||||||
|
'dt_data': json.dumps(liste),
|
||||||
|
'societes': societes,
|
||||||
|
'societe': societe,
|
||||||
|
'nochantiers': nochantiers,
|
||||||
|
'nochantier': nochantier,
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user