Files
CRM/MonitoringVPGrossistes.php
BACHIR SOULDI 2794e62571 first commit
2025-09-28 08:49:37 +01:00

279 lines
8.8 KiB
PHP

<?php
$dbvp = true;
require_once 'MonitoringVMHeader.php';
require_once 'MonitoringDBRequest.php';
$userId = $current_user->get('id');
if(isTopDG($roleid)){$roleid="H10";}
$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, soc.cf_854 as accountname,
CONCAT(first_name,' ', last_name) as fullname ,sum(so.subtotal) as totalmargin, us.id as uid, ro.rolename as role
FROM `vtiger_salesorder` so
JOIN vtiger_salesordercf soc on soc.salesorderid = so.salesorderid
JOIN vtiger_crmentity e on so.`salesorderid` = e.crmid and e.deleted <> 1 and e.setype='SalesOrder'
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." GROUP by uid, accountname, month ,year";
*/
$query = $query." WHERE so.duedate BETWEEN '".$datedeb."' and '".$datefin."'";
$query = $query." GROUP by uid, accountname";
$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_account` g
JOIN vtiger_crmentity e on g.accountid = e.crmid and e.deleted = 0
Where g.industry = 'Grossiste'";
$sql_get_result = $adb->query($query);
$grossistes = array();
while ($recordinfo = $adb->fetch_array($sql_get_result)) {
$grossistes[] = $recordinfo;
}
echo getMonitoringMainBarVP(5).getDateSelect($datedeb,$datefin);
echo '<div class="grid-container">
<div class="convention">
<div style=" text-align: center"><h3>Réalisé par grossiste</h3></div>
<hr>
<div class="form-row">
<div class="form-group col-md-4">
<label for="inputCity">Grossiste</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 = [];
function convertArray(data, grossistesd, usersd)
{
currentusers = usersd;
var c=[];
for(var i = 0; i < grossistesd.length; i++) {
var grossiste = grossistesd[i];
var a=[];
a[0] = grossiste['accountname'];
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['accountname'] == a[0] && $row['fullname'] == user['fullname'])
a[j+1] = parseFloat($row['totalmargin']);
}
}
c[i] = a;
}
return c;
}
function fullNameChange(e) {
document.getElementById("role").value = "All";
var res = grossistes.filter(a => a.accountname.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++) {
trString = trString+"<td>"+myFormatNumber(row[j])+"</td>";
subtotal += parseInt(row[j]);
}
$('#tabcenter').append(trString
+"<td style=' background:#7f8fa6; color: #ffffff; font-weight: bold;'>"+myFormatNumber(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 grossistes = <?php echo json_encode($grossistes); ?>;
function loadByFullName() {
// Converting objects to arrays using Array.prototype.slice.call
var fullnames = Array.prototype.slice.call(result).sort(function(a, b){
if(a.accountname < b.accountname) { return -1; }
if(a.accountname > b.accountname) { return 1; }
return 0;
});
loadTable(convertArray(fullnames, grossistes, users));
}
roleChange("DELEGUE COMMERCIAL");
//filtre region
function regionChange(e) {
document.getElementById("role").value = "All";
if(e== "All")
loadTable(convertArray(result, grossistes, 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, grossistes, filteredUsers));
}
}
//filtre Role
function roleChange(e) {
if(document.getElementById("region").options.length > 1)
document.getElementById("region").value = "All";
if(e== "All")
loadTable(convertArray(result, grossistes, 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, grossistes, filteredUsers));
}
}
</script>
</body>
</html>