301 lines
9.4 KiB
PHP
301 lines
9.4 KiB
PHP
<?php
|
|
|
|
|
|
|
|
$dbvp = true;
|
|
|
|
require_once 'MonitoringVMHeader.php';
|
|
|
|
require_once 'MonitoringDBRequest.php';
|
|
|
|
|
|
|
|
$userId = $current_user->get('id');
|
|
|
|
if(isTopDG($roleid)){$roleid="H10";}
|
|
|
|
/*
|
|
|
|
$monthp = "";
|
|
|
|
if(isset($_POST['month'])) {
|
|
|
|
$monthp = $_POST['month'];
|
|
|
|
$year = $_POST['year'];
|
|
|
|
}*/
|
|
|
|
$datedeb = date("Y-m-d",strtotime("-1 month"));
|
|
|
|
$datefin = date('Y-m-d');
|
|
|
|
if(isset($_POST['datedeb'])) {
|
|
|
|
$datedeb = $_POST['datedeb'];
|
|
|
|
$datefin = $_POST['datefin'];
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
global $adb;
|
|
|
|
$query = "SELECT EXTRACT(year FROM so.duedate) as year , EXTRACT(MONTH FROM so.duedate) as month, p.productname,
|
|
|
|
CONCAT(first_name,' ', last_name) as fullname , sum(ip.quantity) as totalquantity , sum(ip.margin) as totalmargin, us.id as uid, ro.rolename as role
|
|
|
|
FROM `vtiger_salesorder` so
|
|
|
|
JOIN vtiger_inventoryproductrel ip on so.`salesorderid` = ip.id
|
|
|
|
JOIN vtiger_crmentity e on so.`salesorderid` = e.crmid and e.deleted = 0
|
|
|
|
JOIN vtiger_products p on p.productid = ip.productid
|
|
|
|
JOIN vtiger_users us on us.id = e.smownerid and us.status <> 'Inactive'
|
|
|
|
JOIN vtiger_user2role usr ON usr.userid = us.id
|
|
|
|
JOIN vtiger_role ro ON ro.roleid = usr.roleid";
|
|
|
|
/*
|
|
|
|
if($monthp == '')
|
|
|
|
$query = $query." WHERE EXTRACT(MONTH FROM so.duedate) = EXTRACT(MONTH FROM CURRENT_DATE()) and EXTRACT(year FROM so.duedate)=".$year;
|
|
|
|
else
|
|
|
|
$query = $query." WHERE EXTRACT(MONTH FROM so.duedate) = ".$monthp." and EXTRACT(year FROM so.duedate)=".$year;
|
|
|
|
*/
|
|
|
|
$query = $query." WHERE so.duedate BETWEEN '".$datedeb."' and '".$datefin."'";
|
|
|
|
|
|
|
|
$query = $query." GROUP by uid, p.productname";//, month , year";
|
|
|
|
|
|
|
|
|
|
|
|
$sql_get_result = $adb->query($query);
|
|
|
|
|
|
|
|
$result = array();
|
|
|
|
while ($recordinfo = $adb->fetch_array($sql_get_result)) {
|
|
|
|
$result[] = $recordinfo;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
$query = "SELECT id,CONCAT(first_name,' ', last_name) as fullname ,ro.rolename as role FROM vtiger_users US
|
|
|
|
JOIN vtiger_user2role usr ON usr.userid = US.id
|
|
|
|
JOIN vtiger_role ro ON ro.roleid = usr.roleid and US.status <> 'Inactive' and ro.roleid in (SELECT roleid FROM `vtiger_role` WHERE `parentrole` like '%{$roleid}:%' OR `parentrole` like '%{$roleid}' OR ro.roleid = '".$roleid."')";
|
|
|
|
|
|
|
|
if(isVP($roleid))
|
|
|
|
$query = "SELECT id,CONCAT(first_name,' ', last_name) as fullname ,ro.rolename as role FROM vtiger_users US
|
|
|
|
JOIN vtiger_user2role usr ON usr.userid = US.id
|
|
|
|
JOIN vtiger_role ro ON ro.roleid = usr.roleid and US.status <> 'Inactive'
|
|
|
|
where US.id = '{$userId}'";
|
|
|
|
|
|
|
|
$sql_get_result = $adb->query($query);
|
|
|
|
|
|
|
|
$users = array();
|
|
|
|
while ($recordinfo = $adb->fetch_array($sql_get_result)) {
|
|
|
|
$users[] = $recordinfo;
|
|
|
|
}
|
|
|
|
|
|
|
|
$query = "SELECT * FROM `vtiger_products` p
|
|
|
|
JOIN vtiger_crmentity e on p.productid = e.crmid and e.deleted = 0";
|
|
|
|
$sql_get_result = $adb->query($query);
|
|
|
|
|
|
|
|
$products = array();
|
|
|
|
while ($recordinfo = $adb->fetch_array($sql_get_result)) {
|
|
|
|
$products[] = $recordinfo;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
echo getMonitoringMainBarVP(4).getDateSelect($datedeb,$datefin).getUniteType();
|
|
|
|
|
|
|
|
echo '<div class="grid-container">
|
|
|
|
<div class="convention">
|
|
|
|
<div style=" text-align: center"><h3>Réalisé par produit</h3></div>
|
|
|
|
|
|
|
|
<hr>
|
|
|
|
|
|
|
|
<div class="form-row">
|
|
|
|
<div class="form-group col-md-4">
|
|
|
|
<label for="inputCity">Nom & Prénom</label>
|
|
|
|
<input class="form-control mb-4 w-20" type="text" name="nomprenom" placeholder="Rechercher" onKeyUp="fullNameChange(this)">
|
|
|
|
|
|
|
|
</div>'.getRegionSelectSubmit($roleid,false).getRolesSelectVP().'
|
|
|
|
</div>';
|
|
|
|
|
|
|
|
echo'<table id="tabcenter" class="table table-bordered table-striped" >
|
|
|
|
|
|
|
|
</table></div>';
|
|
|
|
|
|
|
|
echo '<div id="chartContainer" style="height: 370px; max-width: 100%; margin: 0px auto;"></div>';
|
|
|
|
|
|
|
|
$viewer->view('CustomDashboardFooter.tpl');
|
|
|
|
?>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<script>
|
|
|
|
|
|
|
|
var currentusers = [];
|
|
|
|
var uniteBD = 'Boite';
|
|
|
|
|
|
|
|
function unitChange(e) {
|
|
|
|
document.getElementById("role").value = "DELEGUE COMMERCIAL";
|
|
|
|
document.getElementById("region").value = "All";
|
|
|
|
uniteBD = e;
|
|
|
|
roleChange("DELEGUE COMMERCIAL");
|
|
|
|
}
|
|
|
|
|
|
|
|
function convertArray(data, productsd, usersd)
|
|
|
|
{
|
|
|
|
currentusers = usersd;
|
|
|
|
var c=[];
|
|
|
|
|
|
|
|
for(var i = 0; i < productsd.length; i++) {
|
|
|
|
var product = productsd[i];
|
|
|
|
var a=[];
|
|
|
|
a[0] = product['productname'];
|
|
|
|
for(var j = 0; j < usersd.length; j++) {
|
|
|
|
var user = usersd[j];
|
|
|
|
a[j+1] = 0;
|
|
|
|
for(var k = 0; k < data.length; k++) {
|
|
|
|
$row = data[k];
|
|
|
|
|
|
|
|
if($row['productname'] == a[0] && $row['fullname'] == user['fullname']) {
|
|
|
|
|
|
|
|
if(uniteBD == 'Boite')
|
|
|
|
a[j+1] = parseInt($row['totalquantity']);
|
|
|
|
else
|
|
|
|
a[j+1] = parseFloat($row['totalmargin']);
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
c[i] = a;
|
|
|
|
}
|
|
|
|
|
|
|
|
return c;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function fullNameChange(e) {
|
|
|
|
document.getElementById("role").value = "All";
|
|
|
|
var res = products.filter(a => a.productname.toUpperCase().includes(e.value.toUpperCase()) );
|
|
|
|
loadTable(convertArray(result, res, currentusers));
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function loadTable(data)
|
|
|
|
{
|
|
|
|
$('#tabcenter tr').slice(0).remove();
|
|
|
|
|
|
|
|
if(data.length > 0) {
|
|
|
|
var trString = "<tr class='center borderline'>"
|
|
|
|
+"<th>Produit</th>";
|
|
|
|
for(var i = 0; i < currentusers.length; i++) {
|
|
|
|
var row = currentusers[i];
|
|
|
|
trString = trString+"<th>"+row['fullname']+"</th>";
|
|
|
|
}
|
|
|
|
$('#tabcenter').append(trString+"<th>Total</th></tr>");
|
|
|
|
|
|
|
|
for(var i = 0; i < data.length; i++) {
|
|
|
|
var row = data[i];
|
|
|
|
var click = "";
|
|
|
|
|
|
|
|
var subtotal = 0;
|
|
|
|
var trString = "<tr class='center borderline'"+click+">";
|
|
|
|
trString = trString+"<td>"+row[0]+"</td>";
|
|
|
|
for(var j = 1; j < currentusers.length+1; j++) {
|
|
|
|
if(uniteBD == 'Boite')
|
|
|
|
trString = trString+"<td>"+row[j]+"</td>";
|
|
|
|
else
|
|
|
|
trString = trString+"<td>"+myFormatNumber(row[j])+" DA</td>";
|
|
|
|
|
|
|
|
subtotal += parseInt(row[j]);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if(uniteBD == 'DA')
|
|
|
|
subtotal = myFormatNumber(subtotal)+' DA';
|
|
|
|
$('#tabcenter').append(trString
|
|
|
|
+"<td style=' background:#7f8fa6; color: #ffffff; font-weight: bold;'>"+subtotal+"</td>"
|
|
|
|
+"</tr>"
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
var totals = [];
|
|
|
|
var allTotals = 0;
|
|
|
|
for (var i = 1; i < currentusers.length+1; i++) {
|
|
|
|
var sum = 0;
|
|
|
|
for(var j = 0; j < data.length; j++) {
|
|
|
|
var row = data[j];
|
|
|
|
sum += row[i];
|
|
|
|
}
|
|
|
|
totals.push(parseInt(sum));
|
|
|
|
allTotals += sum;
|
|
|
|
}
|
|
|
|
allTotals = parseInt(allTotals);
|
|
|
|
|
|
|
|
var trString = "<tr class='center borderline'"+click+">";
|
|
|
|
trString = trString+"<td>TOTAL</td>";
|
|
|
|
for(var j = 0; j < currentusers.length; j++) {
|
|
|
|
trString = trString+"<td>"+myFormatNumber(totals[j])+"</td>";
|
|
|
|
}
|
|
|
|
$('#tabcenter').append(trString
|
|
|
|
+"<td style=' background:#7f8fa6; color: #ffffff; font-weight: bold;'>"+myFormatNumber(allTotals)+"</td>"
|
|
|
|
+"</tr>"
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var result = <?php echo json_encode($result); ?>;
|
|
|
|
var users = <?php echo json_encode($users); ?>;
|
|
|
|
var products = <?php echo json_encode($products); ?>;
|
|
|
|
|
|
|
|
function loadByFullName() {
|
|
|
|
// Converting objects to arrays using Array.prototype.slice.call
|
|
|
|
var fullnames = Array.prototype.slice.call(result).sort(function(a, b){
|
|
|
|
if(a.productname < b.productname) { return -1; }
|
|
|
|
if(a.productname > b.productname) { return 1; }
|
|
|
|
return 0;
|
|
|
|
});
|
|
|
|
|
|
|
|
loadTable(convertArray(fullnames, products, users));
|
|
|
|
}
|
|
|
|
|
|
|
|
roleChange("DELEGUE COMMERCIAL");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//filtre region
|
|
|
|
function regionChange(e) {
|
|
|
|
|
|
|
|
document.getElementById("role").value = "All";
|
|
|
|
|
|
|
|
if(e== "All")
|
|
|
|
loadTable(convertArray(result, products, users));
|
|
|
|
else {
|
|
|
|
var filteredUsers = users.filter(function (item) {
|
|
|
|
if(e === "CENTRE") {
|
|
|
|
return (isCentreVP(item['role']));
|
|
|
|
}
|
|
|
|
if(e === "EST") {
|
|
|
|
return (isEstVP(item['role']));
|
|
|
|
}
|
|
|
|
if(e === "OUEST") {
|
|
|
|
return (isOuestVP(item['role']));
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
});
|
|
|
|
|
|
|
|
loadTable(convertArray(result, products, filteredUsers));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
//filtre Role
|
|
|
|
function roleChange(e) {
|
|
|
|
if(document.getElementById("region").options.length > 1)
|
|
|
|
document.getElementById("region").value = "All";
|
|
|
|
|
|
|
|
if(e== "All")
|
|
|
|
loadTable(convertArray(result, products, users));
|
|
|
|
else {
|
|
|
|
var filteredUsers = users.filter(function (item) {
|
|
|
|
|
|
|
|
if(e === "RESPONSABLE COMMERCIAL") {
|
|
|
|
return (item['role'] == "RESPONSABLE COMMERCIAL")
|
|
|
|
}
|
|
|
|
if(e === "KEY ACCOUNT MANAGER") {
|
|
|
|
return (isKAM(item['role']));
|
|
|
|
}
|
|
|
|
if(e === "DELEGUE COMMERCIAL") {
|
|
|
|
return (isDC(item['role']));
|
|
|
|
}
|
|
|
|
if(e === "SUPERVISEUR COMMERCIAL") {
|
|
|
|
return (isVPSuperviseur(item['role']));
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
});
|
|
|
|
|
|
|
|
loadTable(convertArray(result, products, filteredUsers));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
</body>
|
|
|
|
|
|
|
|
</html>
|