<?php
namespace App\Repository\GestionComerciale;
use App\Entity\Articles\RaisonMouvementStock;
use App\Entity\GestionComerciale\Acompte;
use App\Entity\GestionComerciale\ArticleCommande;
use App\Entity\GestionComerciale\Commande;
use App\Entity\GestionComerciale\StatutCommande;
use App\Entity\GestionComerciale\StatutPaiement;
use App\Model\GestionCommerciale\TypeDocumentCommercial;
use App\Entity\Rangements\ListePreparationCommande;
use DateInterval;
use DateTime;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\DBAL\Connection;
use Doctrine\Persistence\ManagerRegistry;
use App\Entity\Clients\Client;
use App\Entity\Vehicules\VehiculeClient;
/**
* CommandeRepository
*
* This class was generated by the Doctrine ORM. Add your own custom
* repository methods below.
*/
class CommandeRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, Commande::class);
}
public function getAExporter($donnees = [])
{
$parameters = [];
$where = "";
//print_r($donnees);
//exit;
$where = "x.typeDocumentCommercial = :typeDocumentCommercial ";
$parameters["typeDocumentCommercial"] = "2";
if (array_key_exists('statut', $donnees) && $donnees["statut"] != "") {
if ($where == "") {
$where .= "sc.id = :statut ";
} else {
$where .= "AND sc.id = :statut ";
}
$parameters["statut"] = $donnees["statut"];
} else {
//$where = "sc.id = :statut ";
//$parameters["statut"]=$donnees["statut"];
}
if (array_key_exists('client', $donnees) && $donnees["client"] != "") {
if ($where == "") {
$where .= "c.id = :client ";
} else {
$where .= "AND c.id = :client ";
}
$parameters["client"] = $donnees["client"];
}
if (array_key_exists('date_debut', $donnees) && $donnees["date_debut"] != "") {
$dateDebut = DateTime::createFromFormat('d/m/Y', $donnees['date_debut']);
$dateDebut->setTime(23, 59, 59);
if ($where == "") {
$where .= "c.date >= :date_debut ";
} else {
$where .= "AND c.date >= :date_debut ";
}
//$where .= "AND c.date >= :date_debut ";
$parameters["date_debut"] = $dateDebut;
}
if (array_key_exists('date_fin', $donnees) && $donnees["date_fin"] != "") {
$dateFin = DateTime::createFromFormat('d/m/Y', $donnees['date_fin']);
$dateFin->setTime(23, 59, 59);
if ($where == "") {
$where .= "c.date <= :date_fin ";
} else {
$where .= "AND c.date <= :date_fin ";
}
$parameters["date_fin"] = $dateFin;
}
if (array_key_exists('coche', $donnees) && $donnees["coche"] != "") {
$explode_coche = explode(",", $donnees["coche"]);
$parameters["id_commande"] = $explode_coche;
if ($where == "") {
$where .= "x.id IN (:id_commande) ";
} else {
$where .= "AND x.id IN (:id_commande) ";
}
}
/*
{{commande.getDestinataireLivraisonTexte|raw}}
{{commande.numeroLivraison}} {{commande.rueLivraison}}
{{commande.complementLivraison}}
{{commande.complementLivraison2}}
{{commande.codePostalLivraisonTexte}}
{{commande.villeLivraisonTexte}}
{{commande.paysLivraisonTexte}}
*/
//echo $where;
//print_r($parameters);
//exit;
$query = $this->createQueryBuilder('x')
->select(
' x.referenceMarketPlace as refMP, '
. 'c.nom, '
. 'c.prenom, '
. 'x.rueLivraison as adresse1, '
. 'x.complementLivraison as adresse2, '
. 'x.complementLivraison2 as adresse3, '
. 'x.codePostalLivraisonTexte as code_postal,'
. 'x.villeLivraisonTexte as ville, '
. 'x.paysLivraisonTexte as pays, '
. 'c.telephone, '
. 'c.telephone2, '
. 'c.email,'
. 'x.destinataireLivraisonTexte as destinataireLivraisonTexte,'
. 'x.numeroLivraison as numeroLivraison'
);
if ($where != "") {
$query->where($where)->setParameters($parameters);
}
$query->leftJoin('x.client', 'c')
->leftJoin('x.statutCommande', 'sc');
$query->orderBy('x.date', 'DESC');
$res = $query->getQuery()->getResult();
return $res;
}
public function getCaMarketPlace($dateDebut = '', $dateFin = '', $compteMarketPlace = '')
{
$where = 'p.dateSuppression IS NULL AND p.typeDocumentCommercial IN (:typeDocumentCommercial) AND p.statutCommande NOT IN (:statut)';
$parameters = ['typeDocumentCommercial' => [TypeDocumentCommercial::FACTURE, TypeDocumentCommercial::AVOIR], 'statut' => [0]];
if ($dateDebut != '') {
$where .= " AND p.date >= :dateDebut";
$parameters['dateDebut'] = $dateDebut;
}
if ($dateFin != '') {
$where .= " AND p.date < :dateFin";
$parameters['dateFin'] = $dateFin;
}
if ($compteMarketPlace != '') {
$where .= " AND p.compteMarketPlace = :compteMarketPlace";
$parameters['compteMarketPlace'] = $compteMarketPlace;
}
$query = $this->createQueryBuilder('p')
->select("SUM(p.total) as total")
->where($where)
->setParameters($parameters);
$res = $query->getQuery()->getOneOrNullResult();
$sql = $query->getQuery()->getSQL();
if ($compteMarketPlace == "1" or $compteMarketPlace == "2") {
//echo "<hr/><div style='margin-bottom:10px;margin-top:10px;'>".$compteMarketPlace." ".$sql."</div>";
//print_r($parameters);
}
return $res;
}
public function getCaNonFactureMarketPlace($dateDebut = '', $dateFin = '', $compteMarketPlace = '')
{
$where = 'p.dateSuppression IS NULL AND p.typeDocumentCommercial NOT IN (:typeDocumentCommercial) AND p.statutCommande NOT IN (:statut)';
$parameters = ['typeDocumentCommercial' => [TypeDocumentCommercial::FACTURE, TypeDocumentCommercial::AVOIR], 'statut' => [0]];
if ($dateDebut != '') {
$where .= " AND p.date >= :dateDebut";
$parameters['dateDebut'] = $dateDebut;
}
if ($dateFin != '') {
$where .= " AND p.date < :dateFin";
$parameters['dateFin'] = $dateFin;
}
if ($compteMarketPlace != '') {
$where .= " AND p.compteMarketPlace < :compteMarketPlace";
$parameters['compteMarketPlace'] = $compteMarketPlace;
}
$query = $this->createQueryBuilder('p')
->select("SUM(p.total) as total")
->where($where)
->setParameters($parameters);
$res = $query->getQuery()->getOneOrNullResult();
return $res;
}
public function getCommandesExpeditionsEnCoursTardive()
{
$date = new Datetime();
$interval = new DateInterval('PT45M');
$date->sub($interval);
//echo "<div>date ".$date->format("d/m/y H:i")."</div>";
$where = "p.dateConfirmationExpedition < :dateConfirmationExpedition AND p.statutCommande = :statutCommande";
$parameters = [];
$parameters["statutCommande"] = "36";
$parameters["dateConfirmationExpedition"] = $date;
$query = $this->createQueryBuilder('p')
//->select("SUM(p.total) as total")
->where($where)
->setParameters($parameters);
$res = $query->getQuery()->getResult();
return $res;
}
public function getTotalCmdeSifam()
{
$statut = 9;
$query = $this->createQueryBuilder('p')
->select("COUNT(p.id) as total")
->where('p.statutCommande = :statutCommande AND p.dateSuppression IS NULL AND p.sifam = :sifam')
->setParameters(['statutCommande' => $statut, 'sifam' => "1"]);
$res = $query->getQuery()->getOneOrNullResult();
return $res;
}
public function getTotalCmdeVega()
{
$statut = 9;
$query = $this->createQueryBuilder('p')
->select("COUNT(p.id) as total")
->where('p.statutCommande = :statutCommande AND p.dateSuppression IS NULL AND p.vega = :vega')
->setParameters(['statutCommande' => $statut, 'vega' => "1"]);
$res = $query->getQuery()->getOneOrNullResult();
return $res;
}
public function getBlsAfacturer()
{
$query = $this->createQueryBuilder('p')
->select("COUNT(p.id) as total")
->leftJoin('p.statutCommande', 'sc')
->where('p.typeDocumentCommercial = :typeDocumentCommercial AND sc.ordre != 0 AND p.facture is null')
->setParameters(['typeDocumentCommercial' => TypeDocumentCommercial::BL]);
$res = $query->getQuery()->getOneOrNullResult();
return $res;
}
public function getTotalCommandeStatut($statut, $internet = 0)
{
$where_internet = " and p.referenceMarketPlace IS NULL";
if ($internet == 1) {
$where_internet = " and p.referenceMarketPlace IS NOT NULL";
}
$query = $this->createQueryBuilder('p')
->select("COUNT(p.id) as total")
->where('p.statutCommande = :statutCommande AND p.dateSuppression IS NULL ' . $where_internet)
->setParameters(['statutCommande' => $statut]);
$res = $query->getQuery()->getOneOrNullResult();
return $res;
}
public function getDerniereCommandeV2Para($typeDocumentCommercial, $parametres)
{
$nombre = 10;
$tri = 'p.date';
$ordre = 'DESC';
if (isset($parametres)) {
foreach ($parametres as $para) {
if ($para->getParametres()->getType() == 'nombre') {
$nombre = intval($para->getValeur());
}
if ($para->getParametres()->getType() == 'tri') {
$tri = $para->getValeur();
}
if ($para->getParametres()->getType() == 'ordre') {
$ordre = $para->getValeur();
}
}
}
$query = $this->createQueryBuilder('p')
//->select("CONCAT(CONCAT(p.prenom, ' '), p.nom) as libelle, p.id,p.telephone")
->where('p.typeDocumentCommercial = :type and p.visible=1 and p.origineSaisie IN (:origineSaisie)')
->setFirstResult(0)
->setMaxResults($nombre)
->orderBy($tri, $ordre)
->setParameters(['type' => $typeDocumentCommercial, 'origineSaisie' => ["commande", "devis", "bp"]]);
$res = $query->getQuery()->getResult();
return $res;
}
public function getXmlCommandes($param = [])
{
$where = 'x.typeDocumentCommercial IN (:typeDocumentCommercial)';
$parametres_query = ['typeDocumentCommercial' => [TypeDocumentCommercial::DEVIS, TypeDocumentCommercial::COMMANDE, TypeDocumentCommercial::BL, TypeDocumentCommercial::FACTURE]];
$query = $this->createQueryBuilder('x')
//->select("COUNT(p.id) as total")
//->leftJoin('p.marque', 'm')
//->where('(p.divers is null or p.divers = :zero) AND (p.mainOeuvre is null or p.mainOeuvre = :zero) AND (p.prestation is null or p.prestation = :zero) AND (p.nonStocke is null or p.nonStocke = :zero)')
//->setParameters(array('zero' =>'0'))
//->setMaxResults(100000)
->orderBy('x.id', 'DESC');;
if (array_key_exists('type', $param) && $param["type"] == "date") {
$date = (new DateTime())->modify('-3 hours');
//$date = (new \DateTime())->modify('-60 days');
$where .= " AND x.date >= :date";
$parametres_query["date"] = $date;
} elseif (array_key_exists('type', $param) && $param["type"] == "all") {
} else {
$date = (new DateTime())->modify('-6 months');
$where .= " AND x.date >= :date";
$parametres_query["date"] = $date;
}
if (count($parametres_query) > 0) {
$query->where($where);
$query->setParameters($parametres_query);
}
$res = $query->getQuery()->getResult();
return $res;
}
public function getXmlCommandesAnnulees($param = [])
{
$where = 'x.typeDocumentCommercial IN (:typeDocumentCommercial) AND x.dateAnnulation IS NOT NULL AND x.referencePrestashop IS NOT NULL';
$parametres_query = ['typeDocumentCommercial' => [TypeDocumentCommercial::COMMANDE]];
$query = $this->createQueryBuilder('x')
->orderBy('x.id', 'DESC');;
if (array_key_exists('type', $param) && $param["type"] == "date") {
$date = (new DateTime())->modify('-3 hours');
//$date = (new \DateTime())->modify('-30 days');
$where .= " AND x.dateAnnulation >= :date";
$parametres_query["date"] = $date;
} elseif (array_key_exists('type', $param) && $param["type"] == "all") {
} else {
$date = (new DateTime())->modify('-6 months');
$where .= " AND x.dateAnnulation >= :date";
$parametres_query["date"] = $date;
}
if (count($parametres_query) > 0) {
$query->where($where);
$query->setParameters($parametres_query);
}
$res = $query->getQuery()->getResult();
return $res;
}
public function getNombreCommandeInternet($where, $parametres)
{
/*
->addJoin('x.etatCommande', 'ec', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('x.statutCommande', 's', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('x.client', 'c', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
//->addJoin('x.typeDocumentCommercial', 'td', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('x.utilisateur', 'u', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
*/
$query = $this->createQueryBuilder('x')
->leftjoin('x.statutCommande', 's')
->leftjoin('x.client', 'c')
->leftjoin('x.typeDocumentCommercial', 'td')
->leftjoin('x.utilisateur', 'u')
->select("COUNT(x.id) as total")
->where($where)
->setParameters($parametres);
$res = $query->getQuery()->getResult();
return $res[0]["total"];
}
public function getNombreCommandeAttenteValidation($where, $parametres)
{
$query = $this->createQueryBuilder('x')
->leftjoin('x.statutCommande', 's')
->leftjoin('x.typeDocumentCommercial', 'td')
->select("COUNT(x.id) as total")
->where($where)
->setParameters($parametres);
$res = $query->getQuery()->getResult();
return $res[0]["total"];
}
public function getFactureEtBl(Commande $commande, Commande $actuel)
{
$exclure = 0;
if (is_object($actuel->getBl())) {
$exclure = $actuel->getBl()->getId();
}
$repo_statut_document = $this->getEntityManager()->getRepository(StatutCommande::class);
$liste_statut = $repo_statut_document->findBy(["documentCommercial" => [6, 5], "ordre" => [0]]);
$query = $this->createQueryBuilder('p')
->where(
'p.typeDocumentCommercial IN (:typeDocumentCommercial)
AND p.dateSuppression IS NULL
AND p.statutCommande NOT IN (:statutCommande)
AND p.commande = :commande
AND p.id != :actuel
AND p.id != :exclure
AND p.bl is NULL
'
)
->setParameters(['typeDocumentCommercial' => [TypeDocumentCommercial::BL, TypeDocumentCommercial::FACTURE], 'statutCommande' => $liste_statut, "commande" => $commande, "actuel" => $actuel, "exclure" => $exclure]);
$res = $query->getQuery()->getResult();
return $res;
}
public function getFactureEtAvoirEtBl(Commande $commande, Commande $actuel)
{
$exclure = 0;
if (is_object($actuel->getBl())) {
$exclure = $actuel->getBl()->getId();
}
$repo_statut_document = $this->getEntityManager()->getRepository(StatutCommande::class);
$liste_statut = $repo_statut_document->findBy(["documentCommercial" => [6, 5], "ordre" => [0]]);
$query = $this->createQueryBuilder('p')
->where(
'p.typeDocumentCommercial IN (:typeDocumentCommercial)
AND p.dateSuppression IS NULL
AND p.statutCommande NOT IN (:statutCommande)
AND p.commande = :commande
AND p.id != :actuel
AND p.id != :exclure
AND p.bl is NULL
'
)
->setParameters(
['typeDocumentCommercial' => [TypeDocumentCommercial::BL, TypeDocumentCommercial::FACTURE, TypeDocumentCommercial::AVOIR], 'statutCommande' => $liste_statut, "commande" => $commande, "actuel" => $actuel, "exclure" => $exclure]
);
$res = $query->getQuery()->getResult();
return $res;
}
public function getTotalAvoir($moisRaz = '')
{
$repo_statut_document = $this->getEntityManager()->getRepository(StatutCommande::class);
$liste_statut = $repo_statut_document->findBy(["documentCommercial" => 7, "ordre" => [2]]);
if ($moisRaz != "") {
//Y-m-d H:i:s
$date = new Datetime();
if ($moisRaz == '99') {
$date_mois = new Datetime($date->format('Y') . '-' . $date->format('m') . '-01');
} else {
$date_mois = new Datetime($date->format('Y') . '-' . $moisRaz . '-01');
}
$query = $this->createQueryBuilder('p')
->select("COUNT(p.id) as total")
->where('p.typeDocumentCommercial = :typeDocumentCommercial AND p.dateSuppression IS NULL AND p.statutCommande IN (:statutCommande) AND p.date >= :date')
->setParameters(['typeDocumentCommercial' => TypeDocumentCommercial::AVOIR, 'statutCommande' => $liste_statut, 'date' => $date_mois->format("Y-m-d H:i:s")]);
} else {
$query = $this->createQueryBuilder('p')
->select("COUNT(p.id) as total")
->where('p.typeDocumentCommercial = :typeDocumentCommercial AND p.dateSuppression IS NULL AND p.statutCommande IN (:statutCommande)')
->setParameters(['typeDocumentCommercial' => TypeDocumentCommercial::AVOIR, 'statutCommande' => $liste_statut]);
}
$res = $query->getQuery()->getOneOrNullResult();
return $res;
}
public function getTotalBp($moisRaz = '')
{
if ($moisRaz != "") {
//Y-m-d H:i:s
$date = new Datetime();
if ($moisRaz == '99') {
$date_mois = new Datetime($date->format('Y') . '-' . $date->format('m') . '-01');
} else {
$date_mois = new Datetime($date->format('Y') . '-' . $moisRaz . '-01');
}
$query = $this->createQueryBuilder('p')
->select("COUNT(p.id) as total")
->where('p.typeDocumentCommercial = :typeDocumentCommercial AND p.dateSuppression IS NULL AND p.date >= :date')
->setParameters(['typeDocumentCommercial' => TypeDocumentCommercial::BP, 'date' => $date_mois->format("Y-m-d 00:00:00")]);
} else {
$query = $this->createQueryBuilder('p')
->select("COUNT(p.id) as total")
->where('p.typeDocumentCommercial = :typeDocumentCommercial AND p.dateSuppression IS NULL')
->setParameters(['typeDocumentCommercial' => TypeDocumentCommercial::BP]);
}
$res = $query->getQuery()->getOneOrNullResult();
return $res;
}
public function getTotalBpa($moisRaz = '')
{
if ($moisRaz != "") {
//Y-m-d H:i:s
$date = new Datetime();
if ($moisRaz == '99') {
$date_mois = new Datetime($date->format('Y') . '-' . $date->format('m') . '-01');
} else {
$date_mois = new Datetime($date->format('Y') . '-' . $moisRaz . '-01');
}
$query = $this->createQueryBuilder('p')
->select("COUNT(p.id) as total")
->where('p.typeDocumentCommercial = :typeDocumentCommercial AND p.dateSuppression IS NULL AND p.date >= :date')
->setParameters(['typeDocumentCommercial' => TypeDocumentCommercial::BPATELIER, 'date' => $date_mois->format("Y-m-d H:i:s")]);
} else {
$query = $this->createQueryBuilder('p')
->select("COUNT(p.id) as total")
->where('p.typeDocumentCommercial = :typeDocumentCommercial AND p.dateSuppression IS NULL')
->setParameters(['typeDocumentCommercial' => TypeDocumentCommercial::BPATELIER]);
}
$res = $query->getQuery()->getOneOrNullResult();
return $res;
}
public function getTotalBl($moisRaz = '')
{
if ($moisRaz != "") {
//Y-m-d H:i:s
$date = new Datetime();
if ($moisRaz == '99') {
$date_mois = new Datetime($date->format('Y') . '-' . $date->format('m') . '-01');
} else {
$date_mois = new Datetime($date->format('Y') . '-' . $moisRaz . '-01');
}
$query = $this->createQueryBuilder('p')
->select("COUNT(p.id) as total")
->where('p.typeDocumentCommercial = :typeDocumentCommercial AND p.dateSuppression IS NULL AND p.date >= :date')
->setParameters(['typeDocumentCommercial' => TypeDocumentCommercial::BL, 'date' => $date_mois->format("Y-m-d 00:00:00")]);
} else {
$query = $this->createQueryBuilder('p')
->select("COUNT(p.id) as total")
->where('p.typeDocumentCommercial = :typeDocumentCommercial AND p.dateSuppression IS NULL')
->setParameters(['typeDocumentCommercial' => TypeDocumentCommercial::BL]);
}
$res = $query->getQuery()->getOneOrNullResult();
return $res;
}
public function getTotalDevisOr($moisRaz = '')
{
if ($moisRaz != "") {
//Y-m-d H:i:s
$date = new Datetime();
if ($moisRaz == '99') {
$date_mois = new Datetime($date->format('Y') . '-' . $date->format('m') . '-01');
} else {
$date_mois = new Datetime($date->format('Y') . '-' . $moisRaz . '-01');
}
$query = $this->createQueryBuilder('p')
->select("COUNT(p.id) as total")
->where('p.typeDocumentCommercial = :typeDocumentCommercial AND p.dateSuppression IS NULL AND p.date >= :date')
->setParameters(['typeDocumentCommercial' => TypeDocumentCommercial::DEVISOR, 'date' => $date_mois->format("Y-m-d H:i:s")]);
} else {
$query = $this->createQueryBuilder('p')
->select("COUNT(p.id) as total")
->where('p.typeDocumentCommercial = :typeDocumentCommercial AND p.dateSuppression IS NULL')
->setParameters(['typeDocumentCommercial' => TypeDocumentCommercial::DEVISOR]);
}
$res = $query->getQuery()->getOneOrNullResult();
return $res;
}
public function getTotalDevis($moisRaz = '')
{
$total = [];
if ($moisRaz != '') {
// Y-m-d H:i:s
$date = new \DateTime();
if ($moisRaz == '99') {
$date_mois = new \DateTime($date->format('Y') . '-' . $date->format('m') . '-01');
} else {
$date_mois = new \DateTime($date->format('Y') . '-' . $moisRaz . '-01');
}
/* $query = $this->createQueryBuilder('p')
->select("COUNT(p.id) as total")
->where('p.typeDocumentCommercial = :typeDocumentCommercial AND p.date >= :date')
->setParameters(array('typeDocumentCommercial' => TypeDocumentCommercial::DEVIS, 'date' => $date_mois->format("Y-m-d 00:00:00")));
$res = $query->getQuery()->getOneOrNullResult(); */
$query = $this->createQueryBuilder('p')
->select('COUNT(p.id) as total')
->where('p.typeDocumentCommercial = :typeDocumentCommercial AND p.date >= :date')
->setParameters(['typeDocumentCommercial' => TypeDocumentCommercial::DEVIS, 'date' => $date_mois->format('Y-m-d 00:00:00')])
->setMaxResults(1)
->orderBy('p.id', 'DESC');
} else {
/* $query = $this->createQueryBuilder('p')
->select("COUNT(p.id) as total")
->where('p.typeDocumentCommercial = :typeDocumentCommercial')
->setParameters(array('typeDocumentCommercial' => TypeDocumentCommercial::DEVIS))
; */
$query = $this->createQueryBuilder('p')
->select('COUNT(p.id) as total')
->where('p.typeDocumentCommercial = :typeDocumentCommercial')
->setParameters(['typeDocumentCommercial' => TypeDocumentCommercial::DEVIS])
->setMaxResults(1)
->orderBy('p.id', 'DESC');
}
return $query->getQuery()->getOneOrNullResult();
}
public function getTotalCommande($moisRaz = '')
{
$repo_statut_document = $this->getEntityManager()->getRepository(StatutCommande::class);
$liste_statut = $repo_statut_document->findBy(["documentCommercial" => 2, "ordre" => [0, 1, 2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 13]]);
if ($moisRaz != "") {
//Y-m-d H:i:s
$date = new Datetime();
if ($moisRaz == '99') {
$date_mois = new Datetime($date->format('Y') . '-' . $date->format('m') . '-01');
} else {
$date_mois = new Datetime($date->format('Y') . '-' . $moisRaz . '-01');
}
$query = $this->createQueryBuilder('p')
->select("COUNT(p.id) as total")
->where('p.typeDocumentCommercial = :typeDocumentCommercial AND p.statutCommande IN (:statutCommande) AND p.date >= :date')
->setParameters(['typeDocumentCommercial' => TypeDocumentCommercial::COMMANDE, 'statutCommande' => $liste_statut, 'date' => $date_mois->format("Y-m-d 00:00:00")]);
} else {
$query = $this->createQueryBuilder('p')
->select("COUNT(p.id) as total")
->where('p.typeDocumentCommercial = :typeDocumentCommercial AND p.statutCommande IN (:statutCommande)')
->setParameters(['typeDocumentCommercial' => TypeDocumentCommercial::COMMANDE, 'statutCommande' => $liste_statut]);
}
$res = $query->getQuery()->getOneOrNullResult();
return $res;
}
public function getTotalAvoirFacture($facture)
{
$repo_statut_document = $this->getEntityManager()->getRepository(StatutCommande::class);
$liste_statut = $repo_statut_document->findBy(["documentCommercial" => 7, "ordre" => [1]]);
$query = $this->createQueryBuilder('p')
->select("COUNT(p.id) as total");
$where = 'p.commande = :commande AND p.typeDocumentCommercial = :typeDocumentCommercial AND p.dateSuppression IS NULL AND p.statutCommande IN (:statutCommande)';
if (in_array($facture->getTypeDocumentCommercial(), [TypeDocumentCommercial::COMMANDE])) {
$query->join('p.statutCommande', 's');
$where = 'p.commande = :commande AND p.typeDocumentCommercial = :typeDocumentCommercial AND p.dateSuppression IS NULL AND s.ordre NOT IN (:statutCommande)';
$liste_statut = [0];
} elseif ($facture->getTypeDocumentCommercial() == TypeDocumentCommercial::BP) {
$where = 'p.bp = :commande AND p.typeDocumentCommercial = :typeDocumentCommercial AND p.dateSuppression IS NULL AND p.statutCommande IN (:statutCommande)';
} elseif ($facture->getTypeDocumentCommercial() == TypeDocumentCommercial::BL) {
$query->join('p.bls', 'bl');
$where = 'bl = :commande AND p.typeDocumentCommercial = :typeDocumentCommercial AND p.dateSuppression IS NULL AND p.statutCommande IN (:statutCommande)';
}
$query->where($where)
->setParameters(['commande' => $facture, 'typeDocumentCommercial' => TypeDocumentCommercial::AVOIR, 'statutCommande' => $liste_statut]);
$res = $query->getQuery()->getOneOrNullResult();
return $res;
}
public function getNbAvoirEtFacture($commande)
{
$repo_statut_document = $this->getEntityManager()->getRepository(StatutCommande::class);
$liste_statut = $repo_statut_document->findBy(["documentCommercial" => 7, "ordre" => [1]]);
$query = $this->createQueryBuilder('p')
->select("COUNT(p.id) as total");
$where = 'p.commande = :commande AND p.typeDocumentCommercial IN (:typeDocumentCommercial) AND p.dateSuppression IS NULL AND p.statutCommande IN (:statutCommande)';
if (in_array($commande->getTypeDocumentCommercial(), [TypeDocumentCommercial::COMMANDE, TypeDocumentCommercial::ORDREREPARATION])) {
$query->join('p.statutCommande', 's');
$where = 'p.commande = :commande AND p.typeDocumentCommercial IN (:typeDocumentCommercial) AND p.dateSuppression IS NULL AND s.ordre NOT IN (:statutCommande)';
$liste_statut = [0];
} elseif ($commande->getTypeDocumentCommercial() == TypeDocumentCommercial::BP) {
$where = 'p.bp = :commande AND p.typeDocumentCommercial IN (:typeDocumentCommercial) AND p.dateSuppression IS NULL AND p.statutCommande IN (:statutCommande)';
} elseif ($commande->getTypeDocumentCommercial() == TypeDocumentCommercial::BL) {
$query->join('p.bls', 'bl');
$where = 'bl = :commande AND p.typeDocumentCommercial IN (:typeDocumentCommercial) AND p.dateSuppression IS NULL AND p.statutCommande IN (:statutCommande)';
}
$query->where($where)
->setParameters(['commande' => $commande, 'typeDocumentCommercial' => [TypeDocumentCommercial::FACTURE, TypeDocumentCommercial::AVOIR], 'statutCommande' => $liste_statut]);
$res = $query->getQuery()->getOneOrNullResult();
return $res;
}
public function getTotaOrdreRepMecanicien($mecanicien)
{
$query = $this->createQueryBuilder('p')
->select("COUNT(p.id) as total")
->where('p.mecanicien = :mecanicien AND p.dateSuppression IS NULL AND p.typeDocumentCommercial = :documentcommercial')
->setParameters(['mecanicien' => $mecanicien, 'documentcommercial' => 3]);
$res = $query->getQuery()->getOneOrNullResult();
return $res;
}
public function getTotalCommandeClient($client)
{
$query = $this->createQueryBuilder('p')
->select("COUNT(p.id) as total")
->join('p.statutCommande', 'sc')
->where('p.client = :client AND p.dateSuppression IS NULL AND sc.ordre != 0')
->setParameters(['client' => $client]);
$res = $query->getQuery()->getOneOrNullResult();
return $res;
}
public function getTotalCommandeClientFicheClient($client)
{
/*
$query = $this->createQueryBuilder('p')
->select("COUNT(p.id) as total")
//->join('p.typeDocumentCommercial', 't')
->leftjoin('p.statutCommande', 'sc')
->where('p.client = :client '
. 'AND p.dateSuppression IS NULL '
. 'AND (sc.ordre != 0 OR p.typeDocumentCommercial = '.TypeDocumentCommercial::DEVIS.')'
. 'AND ('
. ' (p.typeDocumentCommercial = TypeDocumentCommercial::ORDREREPARATION AND p.statutCommande IN (14,15))'
. ' OR (p.typeDocumentCommercial = '.TypeDocumentCommercial::DEVIS.' AND p.visible = 1 AND p.commande IS NULL)'
. " OR (p.typeDocumentCommercial = ".TypeDocumentCommercial::COMMANDE." AND p.visible= 1 AND p.origineSaisie IN ('devis', 'commande', 'bp'))"
. ' OR (p.typeDocumentCommercial = '.TypeDocumentCommercial::BL.' AND p.visible= 1 AND p.facture IS NULL)'
. ' OR (p.typeDocumentCommercial IN (4, 6, 7) AND p.visible= 1)'
. ')')//(ded.id IS NULL AND dec.id IS NULL AND debp.id IS NULL AND debl.id IS NULL) OR
->setParameters(array('client' => $client))
;
*/
$query = $this->createQueryBuilder('p')
->select("COUNT(p.id) as total")
//->join('p.typeDocumentCommercial', 't')
->leftjoin('p.statutCommande', 'sc')
->where(
'p.client = :client '
. 'AND p.dateSuppression IS NULL '
. 'AND (sc.ordre != 0 OR p.typeDocumentCommercial = ' . TypeDocumentCommercial::DEVIS . ')'
. 'AND ('
. ' (p.typeDocumentCommercial = '.TypeDocumentCommercial::ORDREREPARATION.' AND p.statutCommande IN (14,15))'
. ' OR (p.typeDocumentCommercial = ' . TypeDocumentCommercial::DEVIS . ' AND p.visible = 1 AND p.commande IS NULL)'
. " OR (p.typeDocumentCommercial = " . TypeDocumentCommercial::COMMANDE . " AND p.visible= 1 )"
. ' OR (p.typeDocumentCommercial = ' . TypeDocumentCommercial::BL . ' AND p.visible= 1 AND p.facture IS NULL)'
. ' OR (p.typeDocumentCommercial IN (:typeDocumentCommercial) AND p.visible= 1)'
. ')'
)//(ded.id IS NULL AND dec.id IS NULL AND debp.id IS NULL AND debl.id IS NULL) OR
->setParameter('client',$client)
->setParameter('typeDocumentCommercial',[TypeDocumentCommercial::BP, TypeDocumentCommercial::FACTURE, TypeDocumentCommercial::AVOIR])
;
$res = $query->getQuery()->getOneOrNullResult();
return $res;
}
public function getTotalCommandeClient2($client)
{
$query = $this->createQueryBuilder('p')
->select("COUNT(p.id) as total")
//->join('p.typeDocumentCommercial', 't')
->join('p.statutCommande', 'sc')
->where(
'p.client = :client '
. 'AND p.dateSuppression IS NULL '
. 'AND sc.ordre != 0 '
. 'AND ('
. ' (p.typeDocumentCommercial = TypeDocumentCommercial::ORDREREPARATION AND p.statutCommande IN (14,15))'
. ' OR (p.typeDocumentCommercial = ' . TypeDocumentCommercial::DEVIS . ' AND p.visible = 1 AND p.commande IS NULL)'
. " OR (p.typeDocumentCommercial = " . TypeDocumentCommercial::COMMANDE . " AND p.visible= 1 AND p.origineSaisie IN ('devis', 'commande', 'bp'))"
. ' OR (p.typeDocumentCommercial = ' . TypeDocumentCommercial::BL . ' AND p.visible= 1 AND p.facture IS NULL)'
. ' OR (p.typeDocumentCommercial IN (4, 6, 7) AND p.visible= 1)'
. ')'
)//(ded.id IS NULL AND dec.id IS NULL AND debp.id IS NULL AND debl.id IS NULL) OR
->setParameters(['client' => $client]);
$res = $query->getQuery()->getOneOrNullResult();
return $res;
}
public function getRechercheDevis($recherche, $maxResults = 500)
{
$cond = $recherche . "%";
if (strpos($cond, "*") !== false) {
//$cond = str_replace("*","%",$cond);
}
$query = $this->createQueryBuilder('p')
->leftJoin(VehiculeClient::class, 'v', 'with', 'p.vehiculesClient = v.id')
->where('(p.reference LIKE :cond or v.immatriculation = :recherche) AND p.typeDocumentCommercial = :typeDocumentCommercial')
->setParameters(['cond' => $cond, 'recherche' => $recherche, 'typeDocumentCommercial' => TypeDocumentCommercial::DEVIS])
->setFirstResult(0)
->setMaxResults($maxResults)
->orderBy('p.date', 'DESC');
$res = $query->getQuery()->getResult();
return $res;
}
public function getRechercheFacture($recherche, $maxResults = 500)
{
$cond = $recherche . "%";
if (strpos($cond, "*") !== false) {
//$cond = str_replace("*","%",$cond);
}
$query = $this->createQueryBuilder('p')
->leftJoin(VehiculeClient::class, 'v', 'with', 'p.vehiculesClient = v.id')
->where('(p.reference LIKE :cond or v.immatriculation = :recherche) AND p.typeDocumentCommercial IN (:typeDocumentCommercial)')
->setParameters(['recherche' => $recherche, 'cond' => $cond, 'typeDocumentCommercial' => [TypeDocumentCommercial::FACTURE, TypeDocumentCommercial::AVOIR]])
->setFirstResult(0)
->setMaxResults($maxResults)
->orderBy('p.date', 'DESC');
$res = $query->getQuery()->getResult();
return $res;
}
public function getRechercheBonPreparation($recherche, $maxResults = 500)
{
$cond = $recherche . "%";
if (strpos($cond, "*") !== false) {
//$cond = str_replace("*","%",$cond);
}
$query = $this->createQueryBuilder('p')
->leftJoin(ArticleCommande::class, 'ac', 'with', 'ac.commande = p.id')
//->leftJoin('DTCArticlesBundle:NumeroSerie', 'n', 'with', 'n.articleCommande = ac.id')
->leftJoin(VehiculeClient::class, 'v', 'with', 'p.vehiculesClient = v.id')
->where('(p.reference LIKE :cond or v.immatriculation = :recherche) AND p.typeDocumentCommercial = :typeDocumentCommercial')
->setParameters(['recherche' => $recherche, 'cond' => $cond, 'typeDocumentCommercial' => TypeDocumentCommercial::BP])
->setFirstResult(0)
->setMaxResults($maxResults)
->orderBy('p.date', 'DESC');
$res = $query->getQuery()->getResult();
return $res;
}
public function findBpAafficher()
{
$dateDebut = new Datetime();
$dateDebut->setTime(0, 0, 0);
$dateFin = clone $dateDebut;
$dateFin->add(new DateInterval('P1D'));
$query = $this->createQueryBuilder('p')
->where('p.typeDocumentCommercial = :typeDocumentCommercial and p.dateBon >= :dateDebut and p.dateBon < :dateFin and (p.visible = 0 or p.visible is null)')
->setParameters(['typeDocumentCommercial' => TypeDocumentCommercial::BP, 'dateDebut' => $dateDebut->format("Y-m-d H:i:s"), 'dateFin' => $dateFin->format("Y-m-d H:i:s")])
->orderBy('p.date', 'DESC');
return $query;
}
public function getRechercheBonLivraison($recherche, $maxResults = 500)
{
$cond = $recherche . "%";
if (strpos($cond, "*") !== false) {
//$cond = str_replace("*","%",$cond);
}
$query = $this->createQueryBuilder('p')
->leftJoin(VehiculeClient::class, 'v', 'with', 'p.vehiculesClient = v.id')
->where('(p.reference LIKE :cond or p.referenceMarketPlace LIKE :cond or v.immatriculation = :recherche) AND p.typeDocumentCommercial = :typeDocumentCommercial')
->setParameters(['recherche' => $recherche, 'cond' => $cond, 'typeDocumentCommercial' => TypeDocumentCommercial::BL])
->setFirstResult(0)
->setMaxResults($maxResults)
->orderBy('p.date', 'DESC');
$res = $query->getQuery()->getResult();
return $res;
}
public function getRechercheOrdreRep($recherche, $maxResults = 500)
{
$cond = $recherche . "%";
$cond = "%" . $recherche . "%";
if (strpos($cond, "*") !== false) {
//$cond = str_replace("*","%",$cond);
}
$query = $this->createQueryBuilder('p')
->leftJoin(VehiculeClient::class, 'v', 'with', 'p.vehiculesClient = v.id')
->where(
'(p.reference LIKE :cond or v.libelle LIKE :cond or v.immatriculation LIKE :cond or v.numSerie LIKE :cond) AND p.typeDocumentCommercial = :typeDocumentCommercial'
)
->setParameters(['cond' => $cond, 'typeDocumentCommercial' => TypeDocumentCommercial::ORDREREPARATION])
->setFirstResult(0)
->setMaxResults($maxResults)
->orderBy('p.date', 'DESC');
$res = $query->getQuery()->getResult();
return $res;
}
public function getRechercheCommande($recherche, $maxResults = 25, $parametres = [])
{
//print_r($parametres);
$cond = $recherche . "%";
if (strpos($cond, "*") !== false) {
$cond = str_replace("*", "%", $cond);
}
$where = '(p.reference LIKE :cond or p.referenceMarketPlace LIKE :cond or v.immatriculation = :recherche) AND p.typeDocumentCommercial = :typeDocumentCommercial';
$parameters = ['recherche' => $recherche, 'cond' => $cond, 'typeDocumentCommercial' => TypeDocumentCommercial::COMMANDE];
$query = $this->createQueryBuilder('p');
if (array_key_exists('articles', $parametres) && count($parametres['articles'])) {
$query
->leftJoin('p.articleCommande', 'ac')
->leftJoin('ac.article', 'a');
$where .= ' AND a.id IN (:articles) AND ac.ralClient > 0';
$parameters['articles'] = $parametres['articles'];
}
if (array_key_exists('archive_recherche', $parametres)) {
$query
->leftJoin(VehiculeClient::class, 'v', 'with', 'p.vehiculesClient = v.id')
->where('(p.reference LIKE :cond or p.referenceMarketPlace LIKE :cond or v.immatriculation = :recherche) AND p.typeDocumentCommercial = :typeDocumentCommercial')
->setParameters(['recherche' => $recherche, 'cond' => $cond, 'typeDocumentCommercial' => TypeDocumentCommercial::COMMANDE])
->setFirstResult(0)
->setMaxResults($maxResults)
->orderBy('p.date', 'DESC');
} else {
$query = $this->createQueryBuilder('p')
->leftJoin(VehiculeClient::class, 'v', 'with', 'p.vehiculesClient = v.id')
->where($where)
->setParameters($parameters)
->setFirstResult(0)
->setMaxResults($maxResults)
->orderBy('p.date', 'DESC');
}
$res = $query->getQuery()->getResult();
return $res;
}
public function getDerniereCommandeV2($typeDocumentCommercial)
{
$query = $this->createQueryBuilder('p')
//->select("CONCAT(CONCAT(p.prenom, ' '), p.nom) as libelle, p.id,p.telephone")
->where('p.typeDocumentCommercial = :type and p.visible=1 and p.origineSaisie IN (:origineSaisie)')
->setFirstResult(0)
->setMaxResults(5)
->orderBy('p.date', 'DESC')
->setParameters(['type' => $typeDocumentCommercial, 'origineSaisie' => ["commande", "devis", "bp"]]);
$res = $query->getQuery()->getResult();
return $res;
}
public function getDerniereCommande($typeDocumentCommercial)
{
$query = $this->createQueryBuilder('p')
//->select("CONCAT(CONCAT(p.prenom, ' '), p.nom) as libelle, p.id,p.telephone")
->where('p.typeDocumentCommercial = :type and p.visible=1')
->setFirstResult(0)
->setMaxResults(5)
->orderBy('p.date', 'DESC')
->setParameters(['type' => $typeDocumentCommercial]);
$res = $query->getQuery()->getResult();
return $res;
}
public function getTotalVente($date)
{
$dateDebut = $date->format("Y-m-d") . " 00:00:00";
$dateFin = $date->format("Y-m-d") . " 23:59:59";
$query = $this->createQueryBuilder('p')
//->select("SUM(p.total+p.fraisPortSupplementaire+p.totalFraisPort) as total")
->select("SUM(COALESCE(p.total,0)+COALESCE(p.fraisPortSupplementaire,0)+COALESCE(p.totalFraisPort,0)) as total")
->where(
'p.dateSuppression IS NULL and p.date >= :dateDebut and p.date <= :dateFin and p.statutCommande NOT IN (:status) AND p.typeDocumentCommercial = :typeDocumentCommercial'
)
->setParameters(['typeDocumentCommercial' => TypeDocumentCommercial::COMMANDE, 'dateDebut' => $dateDebut, 'dateFin' => $dateFin, 'status' => [6, 7, 8]]);
$total = $query->getQuery()->getSingleScalarResult();
//print_r($total);
//echo "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$";
$sql = "
SELECT SUM(COALESCE(c.total,0)+COALESCE(c.frais_port_supplementaire,0)+COALESCE(c.total_frais_port,0)) as total
FROM `commerciale__commande` as c
LEFT JOIN commerciale__commande as f on c.facture_id = f.id
LEFT JOIN client__client as u on u.id = c.client_id
WHERE
(
(c.type_document_commercial_id = " . TypeDocumentCommercial::AVOIR . " AND c.statut_commande_id != 19 AND c.multi_bl != 1 AND c.date >= '" . $dateDebut . "' AND c.date <= '" . $dateFin . "')
OR
(c.type_document_commercial_id = " . TypeDocumentCommercial::FACTURE . " AND c.statut_commande_id != 23 AND c.multi_bl != 1 AND c.date >= '" . $dateDebut . "' AND c.date <= '" . $dateFin . "')
OR
(c.type_document_commercial_id = " . TypeDocumentCommercial::BL . " AND c.statut_commande_id != 24 AND c.facture_id > 0 AND f.multi_bl = 1
AND f.statut_commande_id != 23
and
f.date >= '" . $dateDebut . "' AND f.date <= '" . $dateFin . "'
)
)
";
//echo "<br/><br/><br/>";
$sql = trim($sql);
$em = $this->getEntityManager();
$stmt = $em->getConnection()->prepare($sql);
$totaux = $stmt->executeQuery()->fetchAllAssociative();
return $totaux["0"]["total"];
//print_r($totaux);
//echo "#############################";
//return $total;
}
public function getPremiereLivraison($commande)
{
$repo_statut_document = $this->getEntityManager()->getRepository(StatutCommande::class);
$liste_statut = $repo_statut_document->findBy(["documentCommercial" => 5, "ordre" => [0]]);
$query = $this->createQueryBuilder('p')
->select("p.id")
->where('p.bp = :bp AND p.typeDocumentCommercial = :typeDocumentCommercial AND p.dateSuppression IS NULL and p.statutCommande NOT IN (:statutCommande)')
->setFirstResult(0)
->setMaxResults(1)
->orderBy('p.id', 'ASC')
->setParameters(['bp' => $commande, 'typeDocumentCommercial' => TypeDocumentCommercial::BL, 'statutCommande' => $liste_statut]);
$res = $query->getQuery()->getOneOrNullResult();
return $res;
}
public function getPremierBonPrepa($commande)
{
$repo_statut_document = $this->getEntityManager()->getRepository(StatutCommande::class);
$liste_statut = $repo_statut_document->findBy(["documentCommercial" => 4, "ordre" => [0]]);
$query = $this->createQueryBuilder('p')
->select("p.id")
->where('p.commande = :commande AND p.typeDocumentCommercial = :typeDocumentCommercial AND p.dateSuppression IS NULL and p.statutCommande NOT IN (:statutCommande)')
->setFirstResult(0)
->setMaxResults(1)
//->orderBy('p.date', 'DESC')
->orderBy('p.id', 'ASC')
->setParameters(['commande' => $commande, 'typeDocumentCommercial' => TypeDocumentCommercial::BP, 'statutCommande' => $liste_statut]);
$res = $query->getQuery()->getOneOrNullResult();
return $res;
}
public function getDernierBonPrepa($commande)
{
$query = $this->createQueryBuilder('p')
->select("p.id")
->where('p.commande = :commande AND p.typeDocumentCommercial = :typeDocumentCommercial AND p.dateSuppression IS NULL')
->setFirstResult(0)
->setMaxResults(1)
->orderBy('p.id', 'DESC')
->setParameters(['commande' => $commande, 'typeDocumentCommercial' => TypeDocumentCommercial::BP]);
$res = $query->getQuery()->getOneOrNullResult();
return $res;
}
public function getDernierBonPrepaAtelier($commande)
{
$query = $this->createQueryBuilder('p')
->select("p.id")
->where('p.commande = :commande AND p.typeDocumentCommercial = :typeDocumentCommercial AND p.dateSuppression IS NULL')
->setFirstResult(0)
->setMaxResults(1)
->orderBy('p.id', 'DESC')
->setParameters(['commande' => $commande, 'typeDocumentCommercial' => TypeDocumentCommercial::BPATELIER]);
$res = $query->getQuery()->getOneOrNullResult();
return $res;
}
public function getTotalBonPreparationAtelier($commande)
{
$repo_statut_document = $this->getEntityManager()->getRepository(StatutCommande::class);
$liste_statut = $repo_statut_document->findBy(["documentCommercial" => 11, "ordre" => [0]]);
$query = $this->createQueryBuilder('p')
->select("COUNT(p.id) as total")
->where('p.commande = :commande AND p.typeDocumentCommercial = :typeDocumentCommercial AND p.dateSuppression IS NULL AND p.statutCommande NOT IN (:statutCommande)')
->setParameters(['commande' => $commande, 'typeDocumentCommercial' => TypeDocumentCommercial::BPATELIER, 'statutCommande' => $liste_statut]);
$res = $query->getQuery()->getOneOrNullResult();
return $res;
}
public function getTotalBonCommande($commande)
{
$repo_statut_document = $this->getEntityManager()->getRepository(StatutCommande::class);
$liste_statut = $repo_statut_document->findBy(["documentCommercial" => 4, "ordre" => [0]]);
$query = $this->createQueryBuilder('p')
->select("COUNT(p.id) as total")
->where('p.commande = :commande AND p.typeDocumentCommercial = :typeDocumentCommercial AND p.dateSuppression IS NULL AND p.statutCommande NOT IN (:statutCommande)')
->setParameters(['commande' => $commande, 'typeDocumentCommercial' => TypeDocumentCommercial::BP, 'statutCommande' => $liste_statut]);
$res = $query->getQuery()->getOneOrNullResult();
return $res;
}
public function getDocumentClientAmodifier(Commande $commande)
{
/*
$repo_statut_document = $this->getEntityManager()->getRepository('DTCGestionComercialeBundle:StatutCommande');
$liste_statut = $repo_statut_document->findBy(array("documentCommercial"=>4,"ordre"=>array(0)));
*
*/
$where = 'p.commande = :commande AND p.dateSuppression IS NULL';
if (is_object($commande->getCommande())) {
$commande = $commande->getCommande();
$where = '(p.id= :commande OR p.commande = :commande) AND p.dateSuppression IS NULL';
}
$query = $this->createQueryBuilder('p')
->where($where)
->setParameters(['commande' => $commande->getId()]);
return $query;
}
public function getTotalBonPreparationByCommandes($commandes)
{
$repo_statut_document = $this->getEntityManager()->getRepository(StatutCommande::class);
$liste_statut = $repo_statut_document->findBy(["documentCommercial" => 4, "ordre" => [0]]);
$query = $this->createQueryBuilder('p')
->select("COUNT(p.id) as total")
->where('p.commande IN (:commandes) AND p.typeDocumentCommercial = :typeDocumentCommercial AND p.dateSuppression IS NULL AND p.statutCommande NOT IN (:statutCommande)')
->setParameters(['commandes' => $commandes, 'typeDocumentCommercial' => TypeDocumentCommercial::BP, 'statutCommande' => $liste_statut]);
$res = $query->getQuery()->getOneOrNullResult();
return $res;
}
public function getTotalBonLivraison($commande)
{
$repo_statut_document = $this->getEntityManager()->getRepository(StatutCommande::class);
$liste_statut = $repo_statut_document->findBy(["documentCommercial" => 5, "ordre" => [0]]);
$query = $this->createQueryBuilder('p')
->select("COUNT(p.id) as total")
->where('p.bp = :commande AND p.typeDocumentCommercial = :typeDocumentCommercial AND p.dateSuppression IS NULL AND p.statutCommande NOT IN (:statutCommande)')
->setParameters(['commande' => $commande, 'typeDocumentCommercial' => TypeDocumentCommercial::BL, 'statutCommande' => $liste_statut]);
$res = $query->getQuery()->getOneOrNullResult();
return $res;
}
public function getTotalBonLivraisonSurCommande($commande)
{
$repo_statut_document = $this->getEntityManager()->getRepository(StatutCommande::class);
$liste_statut = $repo_statut_document->findBy(["documentCommercial" => 5, "ordre" => [0]]);
$query = $this->createQueryBuilder('p')
->select("COUNT(p.id) as total")
->where('p.commande = :commande AND p.typeDocumentCommercial = :typeDocumentCommercial AND p.dateSuppression IS NULL AND p.statutCommande NOT IN (:statutCommande)')
->setParameters(['commande' => $commande, 'typeDocumentCommercial' => TypeDocumentCommercial::BL, 'statutCommande' => $liste_statut]);
$res = $query->getQuery()->getOneOrNullResult();
return $res;
}
public function getBonsLivraison($commande)
{
$repo_statut_document = $this->getEntityManager()->getRepository(StatutCommande::class);
$liste_statut = $repo_statut_document->findBy(["documentCommercial" => 5, "ordre" => [0]]);
$query = $this->createQueryBuilder('p')
//->select("p.id")
->where('p.bp = :commande AND p.typeDocumentCommercial = :typeDocumentCommercial AND p.dateSuppression IS NULL AND p.statutCommande NOT IN (:statutCommande)')
->setParameters(['commande' => $commande, 'typeDocumentCommercial' => TypeDocumentCommercial::BL, 'statutCommande' => $liste_statut]);
$res = $query->getQuery()->getResult();
return $res;
}
public function getTotalOrdreReparation($commande = "", $moisRaz = '')
{
if (!is_object($commande)) {
$repo_statut_document = $this->getEntityManager()->getRepository(StatutCommande::class);
$liste_statut = $repo_statut_document->findBy(["documentCommercial" => 3, "ordre" => [0, 1, 2, 3, 4]]);
if ($moisRaz != "") {
//Y-m-d H:i:s
$date = new Datetime();
if ($moisRaz == '99') {
$date_mois = new Datetime($date->format('Y') . '-' . $date->format('m') . '-01');
} else {
$date_mois = new Datetime($date->format('Y') . '-' . $moisRaz . '-01');
}
$query = $this->createQueryBuilder('p')
->select("COUNT(p.id) as total")
->where('p.typeDocumentCommercial = :typeDocumentCommercial AND p.statutCommande IN (:statutCommande) AND p.date >= :date')
->setParameters(['typeDocumentCommercial' => TypeDocumentCommercial::ORDREREPARATION, 'statutCommande' => $liste_statut, 'date' => $date_mois->format("Y-m-d 00:00:00")]);
} else {
$query = $this->createQueryBuilder('p')
->select("COUNT(p.id) as total")
->where('p.typeDocumentCommercial = :typeDocumentCommercial AND p.statutCommande IN (:statutCommande)')
->setParameters(['typeDocumentCommercial' => TypeDocumentCommercial::ORDREREPARATION, 'statutCommande' => $liste_statut]);
}
} else {
$query = $this->createQueryBuilder('p')
->select("COUNT(p.id) as total")
->where('p.commande = :commande AND p.typeDocumentCommercial = :typeDocumentCommercial')
->setParameters(['commande' => $commande, 'typeDocumentCommercial' => TypeDocumentCommercial::ORDREREPARATION]);
}
$res = $query->getQuery()->getOneOrNullResult();
return $res;
}
public function getProchainNumeroFacture($commande = "", $moisRaz = '')
{
$repo_statut_document = $this->getEntityManager()->getRepository(StatutCommande::class);
$liste_statut = $repo_statut_document->findBy(["documentCommercial" => $commande->getTypeDocumentCommercial(), "ordre" => [1]]);
if ($moisRaz != "") {
//Y-m-d H:i:s
$date = new Datetime();
if ($moisRaz == '99') {
$date_mois = new Datetime($date->format('Y') . '-' . $date->format('m') . '-01');
} else {
$date_mois = new Datetime($date->format('Y') . '-' . $moisRaz . '-01');
}
/*
$query = $this->createQueryBuilder('p')
->select("p.numeroReference")
->where('p.typeDocumentCommercial = :typeDocumentCommercial AND p.dateSuppression IS NULL AND p.date >= :date AND p.statutCommande IN (:statutCommande) AND p.numeroReference IS NOT NULL AND p.basculeComptabilite = :basculeComptabilite')
->setParameters(array('typeDocumentCommercial'=>$commande->getTypeDocumentCommercial(),'date'=>$date_mois->format("Y-m-d H:i:s"),'statutCommande'=>$liste_statut,"basculeComptabilite"=>false))
->orderBy('p.numeroReference', 'ASC')
;
*/
$query = $this->createQueryBuilder('p')
//->select("p.numeroReference")
->select("MAX(p.numeroReference)")
->where(
'p.typeDocumentCommercial = :typeDocumentCommercial AND p.dateSuppression IS NULL AND p.date >= :date AND p.statutCommande IN (:statutCommande) AND p.numeroReference IS NOT NULL'
)
->setParameters(
[
'typeDocumentCommercial' => $commande->getTypeDocumentCommercial(),
'date' => $date_mois->format("Y-m-d H:i:s"),
'statutCommande' => $liste_statut,
]
)//->orderBy('p.numeroReference', 'ASC')
;
} else {
/*
$query = $this->createQueryBuilder('p')
->select("p.numeroReference")
->where('p.typeDocumentCommercial = :typeDocumentCommercial AND p.dateSuppression IS NULL AND p.statutCommande IN (:statutCommande) AND p.numeroReference IS NOT NULL AND p.basculeComptabilite = :basculeComptabilite')
->setParameters(array('typeDocumentCommercial'=>$commande->getTypeDocumentCommercial(),'statutCommande'=>$liste_statut,"basculeComptabilite"=>false))
->orderBy('p.numeroReference', 'ASC')
;
*/
$query = $this->createQueryBuilder('p')
//->select("p.numeroReference")
->select("MAX(p.numeroReference)")
->where(
'p.typeDocumentCommercial = :typeDocumentCommercial AND p.dateSuppression IS NULL AND p.statutCommande IN (:statutCommande) AND p.numeroReference IS NOT NULL'
)
->setParameters(['typeDocumentCommercial' => $commande->getTypeDocumentCommercial(), 'statutCommande' => $liste_statut]
)//->orderBy('p.numeroReference', 'ASC')
;
}
$temp_numero = "0";
$numero = 1;
$dernier_numero = 1;
//$res = $query->getQuery()->getResult();
$res = $query->getQuery()->getSingleScalarResult();
$res++;
return $res;
/*
echo "<div>".$commande->getTypeDocumentCommercial()."</div>";
echo count($res);
exit;
*/
if (count($res) > 0) {
for ($i = 0; $i < count($res); $i++) {
if ($i == 0) {
$dernier_numero = $res[$i]['numeroReference'] + 1;
$temp_numero = $res[$i]['numeroReference'];
} else {
if (($temp_numero + 1) < $res[$i]['numeroReference']) {
return ($temp_numero + 1);
} else {
$temp_numero = $res[$i]['numeroReference'];
}
}
}
}
return $temp_numero + 1;
}
public function getMontantTotalFacture($commande)
{
$total = 0;
$repo_statut_document = $this->getEntityManager()->getRepository(StatutCommande::class);
$liste_statut = $repo_statut_document->findBy(["documentCommercial" => 6, "ordre" => [1]]);
if (is_object($commande)) {
$query = $this->createQueryBuilder('p')->select("SUM(COALESCE(p.totalTtc,0)) as total");
$where = 'p.commande = :commande AND p.typeDocumentCommercial = :typeDocumentCommercial AND p.dateSuppression IS NULL AND p.statutCommande IN (:statutCommande)';
$query->where($where);
$query->setParameters(['commande' => $commande, 'typeDocumentCommercial' => TypeDocumentCommercial::FACTURE, 'statutCommande' => $liste_statut]);
$res = $query->getQuery()->getOneOrNullResult();
$total = $res["total"];
}
return $total;
}
public function getTotalFacture($commande = "", $moisRaz = '')
{
$repo_statut_document = $this->getEntityManager()->getRepository(StatutCommande::class);
$liste_statut = $repo_statut_document->findBy(["documentCommercial" => 6, "ordre" => [1]]);
if (!is_object($commande)) {
if ($moisRaz != "") {
//Y-m-d H:i:s
$date = new Datetime();
if ($moisRaz == '99') {
$date_mois = new Datetime($date->format('Y') . '-' . $date->format('m') . '-01');
} else {
$date_mois = new Datetime($date->format('Y') . '-' . $moisRaz . '-01');
}
$query = $this->createQueryBuilder('p')
->select("COUNT(p.id) as total")
->where('p.typeDocumentCommercial = :typeDocumentCommercial AND p.dateSuppression IS NULL AND p.date >= :date AND p.statutCommande IN (:statutCommande)')
->setParameters(['typeDocumentCommercial' => TypeDocumentCommercial::FACTURE, 'date' => $date_mois->format("Y-m-d H:i:s"), 'statutCommande' => $liste_statut]);
} else {
$query = $this->createQueryBuilder('p')
->select("COUNT(p.id) as total")
->where('p.typeDocumentCommercial = :typeDocumentCommercial AND p.dateSuppression IS NULL AND p.statutCommande IN (:statutCommande)')
->setParameters(['typeDocumentCommercial' => TypeDocumentCommercial::FACTURE, 'statutCommande' => $liste_statut]);
}
} else {
$query = $this->createQueryBuilder('p')
->select("COUNT(p.id) as total");
$where = 'p.commande = :commande AND p.typeDocumentCommercial = :typeDocumentCommercial AND p.dateSuppression IS NULL AND p.statutCommande IN (:statutCommande)';
if ($commande->getTypeDocumentCommercial() == TypeDocumentCommercial::BP) {
$where = 'p.bp = :commande AND p.typeDocumentCommercial = :typeDocumentCommercial AND p.dateSuppression IS NULL AND p.statutCommande IN (:statutCommande)';
} elseif ($commande->getTypeDocumentCommercial() == TypeDocumentCommercial::BL) {
$query->join('p.bls', 'bl');
$where = 'bl = :commande AND p.typeDocumentCommercial = :typeDocumentCommercial AND p.dateSuppression IS NULL AND p.statutCommande IN (:statutCommande)';
}
$query->where($where)
->setParameters(['commande' => $commande, 'typeDocumentCommercial' => TypeDocumentCommercial::FACTURE, 'statutCommande' => $liste_statut]);
}
$res = $query->getQuery()->getOneOrNullResult();
return $res;
}
public function getTotalOrEnCours()
{
$query = $this->createQueryBuilder('p')
->select("COUNT(p.id) as total")
->where('p.typeDocumentCommercial = :typeDocumentCommercial AND p.statutCommande IN (:statutCommande) AND p.dateSuppression IS NULL')
->setParameters(['typeDocumentCommercial' => TypeDocumentCommercial::ORDREREPARATION, 'statutCommande' => [14, 15]]);
$res = $query->getQuery()->getOneOrNullResult();
return $res;
}
public function getTotalCommandeInternetSansTransporteur()
{
$query = $this->createQueryBuilder('p')
//->select("COUNT(p.id) as total")
->where(
'p.compteMarketPlace is not null and p.transporteur is null AND p.typeDocumentCommercial = :typeDocumentCommercial AND p.statutCommande = :statutCommande AND p.dateSuppression IS NULL AND p.visible = :visible'
)
->setParameters(['typeDocumentCommercial' => TypeDocumentCommercial::COMMANDE, 'statutCommande' => 9, 'visible' => 1]);
$res = $query->getQuery()->getResult();
return $res;
}
public function getBpAPreparerAttente()
{
$query = $this->createQueryBuilder('p')
//->select("COUNT(p.id) as total")
->where('p.typeDocumentCommercial = :typeDocumentCommercial AND p.statutCommande = :statutCommande AND p.dateSuppression IS NULL AND p.visible = :visible')
->setParameters(['typeDocumentCommercial' => TypeDocumentCommercial::BP, 'statutCommande' => 32, 'visible' => 1]);
$res = $query->getQuery()->getResult();
return $res;
}
public function getBpAEmballerAttente()
{
$query = $this->createQueryBuilder('p')
//->select("COUNT(p.id) as total")
->where('p.typeDocumentCommercial = :typeDocumentCommercial AND p.statutCommande = :statutCommande AND p.dateSuppression IS NULL AND p.visible = :visible')
->setParameters(['typeDocumentCommercial' => TypeDocumentCommercial::BP, 'statutCommande' => 33, 'visible' => 1]);
$res = $query->getQuery()->getResult();
return $res;
}
public function totalBpAnomalies()
{
/*
$parameters["typeDocumentCommercial"]=4;
$parameters["statutCommande"]=array(32,33);
$where = '(x.typeDocumentCommercial = :typeDocumentCommercial and x.statutCommande IN (:statutCommande))';
$where .= ' OR (x.transporteur is null and x.statutCommande = :statutCommandeAccepte and x.compteMarketPlace is not null)';
$where .= ' OR (x.raisonAnomalie is not null)';
$parameters["statutCommandeAccepte"]=9;
*/
$parameters = [];
$parameters["typeDocumentCommercial"] = 4;
$parameters["statutEmballe"] = 31;
$parameters["statutCommande"] = [32, 33];
$where = '(x.typeDocumentCommercial = :typeDocumentCommercial and x.statutCommande IN (:statutCommande))';
$where .= ' OR (x.transporteur is null and x.statutCommande = :statutCommandeAccepte and x.compteMarketPlace is not null)';
$where .= ' OR (x.statutCommande != :statutEmballe and x.raisonAnomalie is not null and x.typeDocumentCommercial = :typeDocumentCommercial)';
$parameters["statutCommandeAccepte"] = 9;
$query = $this->createQueryBuilder('x')
->select("COUNT(x.id) as total")
->where($where)
->setParameters($parameters);
$res = $query->getQuery()->getOneOrNullResult();
return $res["total"];
}
public function getTotalBpAEmballer()
{
$query = $this->createQueryBuilder('p')
->select("COUNT(p.id) as total")
->where('p.typeDocumentCommercial = :typeDocumentCommercial AND p.statutCommande = :statutCommande AND p.dateSuppression IS NULL AND p.visible = :visible')
->setParameters(['typeDocumentCommercial' => TypeDocumentCommercial::BP, 'statutCommande' => 12, 'visible' => 1]);
$res = $query->getQuery()->getOneOrNullResult();
return $res;
}
public function getTotalBpEnCours()
{
$query = $this->createQueryBuilder('p')
->select("COUNT(p.id) as total")
->where('p.typeDocumentCommercial = :typeDocumentCommercial AND p.statutCommande = :statutCommande AND p.dateSuppression IS NULL AND p.visible = :visible')
->setParameters(['typeDocumentCommercial' => TypeDocumentCommercial::BP, 'statutCommande' => 10, 'visible' => 1]);
$res = $query->getQuery()->getOneOrNullResult();
return $res;
}
public function getProchainBpEmballerParEan($lp, $article, $quantite)
{
//echo "<div>LP:".$lp->getId()."</div>";
//echo "<div>QTE".$quantite."</div>";
//echo "<div>ART:".$article->getReference()."</div>";
$query = $this->createQueryBuilder('p')
//->select("COUNT(p.id) as total")
->join('p.articleCommande', 'ac')
//->leftJoin('DTCGestionComercialeBundle:ArticleCommande', 'ac', 'with', 'ac.commande = p.id')
//->leftJoin('DTCRangementsBundle:ListePreparation', 'lp', 'with', 'lp.id = p.id')
->join(ListePreparationCommande::class, 'lpc', 'with', 'lpc.bp = p.id')
->where(
'lpc.listePreparation = :lp
and
p.typeDocumentCommercial = :typeDocumentCommercial
AND
p.dateSuppression IS NULL
and
ac.article = :article
and
ac.quantite >= :quantite
and
p.statutCommande IN (:statutCommande)
'
)
->setParameters(['statutCommande' => [12, 33], 'typeDocumentCommercial' => TypeDocumentCommercial::BP, "article" => $article, "quantite" => $quantite, "lp" => $lp])
->orderBy('p.dateBon', 'ASC')
->setMaxResults(1);;
$res = $query->getQuery()->getOneOrNullResult();
return $res;
}
public function getProchainBpAPreparer()
{
$query = $this->createQueryBuilder('p')
//->select("COUNT(p.id) as total")
->where('p.typeDocumentCommercial = :typeDocumentCommercial AND p.statutCommande = :statutCommande AND p.dateSuppression IS NULL AND p.visible = :visible')
->setParameters(['typeDocumentCommercial' => TypeDocumentCommercial::BP, 'statutCommande' => 10, 'visible' => 1])
->orderBy('p.dateBon', 'ASC')
->setMaxResults(1);;
$res = $query->getQuery()->getOneOrNullResult();
return $res;
}
public function getProchainBpAEmballer($ean)
{
$query = $this->createQueryBuilder('p')
//->select("COUNT(p.id) as total")
->where(
'p.typeDocumentCommercial = :typeDocumentCommercial AND p.statutCommande = :statutCommande AND p.dateSuppression IS NULL AND p.visible = :visible AND c.ean LIKE :ean'
)
->leftJoin('p.commandeCaisses', 'cc')
->leftJoin('cc.caisse', 'c')
->setParameters(['typeDocumentCommercial' => TypeDocumentCommercial::BP, 'statutCommande' => 12, 'visible' => 1, 'ean' => $ean])//préparé
->orderBy('p.dateBon', 'ASC')
->setMaxResults(1);;
$res = $query->getQuery()->getOneOrNullResult();
return $res;
}
public function getTotalDevisEnCours()
{
$repo_statut_commande = $this->getEntityManager()->getRepository(StatutCommande::class);
$liste_statut = $repo_statut_commande->findBy(["documentCommercial" => 1, "ordre" => [2, 3]]);
$query = $this->createQueryBuilder('p')
->select("COUNT(p.id) as total")
->where(
'p.typeDocumentCommercial = :typeDocumentCommercial AND p.dateSuppression IS NULL AND p.commande IS NULL and p.visible = :visible and (p.perdu = :perdu or p.perdu is null)'
)
->setParameters(['typeDocumentCommercial' => TypeDocumentCommercial::DEVIS, 'visible' => 1, "perdu" => "0",]);
$res = $query->getQuery()->getOneOrNullResult();
return $res;
}
public function getTotalDevisAPurger()
{
$repo_statut_commande = $this->getEntityManager()->getRepository(StatutCommande::class);
$date = (new DateTime())->modify('-3 months');
$query = $this->createQueryBuilder('p')
->select("p.id ")
//->leftjoin('p.commande', 'c')
//->leftjoin('c.statutCommande', 'sc')
->where('p.typeDocumentCommercial IN (:typeDocumentCommercial) AND p.commande IS NULL AND p.date <= :date')
->setParameters(['typeDocumentCommercial' => TypeDocumentCommercial::DEVIS, 'date' => $date]);
$res = $query->getQuery()->getResult();
return $res;
}
public function getTotalCommandeEnCours($internet = 0)
{
//x.typeDocumentCommercial = :typeDocumentCommercial AND (x.origine is null OR x.valideManuellement = 1) AND x.statutCommande IN (:statuts)
/*
[0] => 9
[1] => 2
[2] => 1
[3] => 6
[4] => 28
*/
$where_internet = " and x.referenceMarketPlace IS NULL";
if ($internet == 1) {
$where_internet = " and x.referenceMarketPlace IS NOT NULL";
}
$statutCommande = [9, 2, 1, 6, 28];
$statutCommande = [9];
$query = $this->createQueryBuilder('x')
->select("COUNT(x.id) as total")
->where('x.typeDocumentCommercial = :typeDocumentCommercial AND x.statutCommande IN (:statuts) ' . $where_internet)
->setParameters(['typeDocumentCommercial' => TypeDocumentCommercial::COMMANDE, 'statuts' => $statutCommande]);
$res = $query->getQuery()->getOneOrNullResult();
return $res;
/*
$statutCommande = array(7,6);
$query = $this->createQueryBuilder('p')
->select("COUNT(p.id) as total")
->where('p.typeDocumentCommercial = :typeDocumentCommercial AND p.statutCommande NOT IN (:statutCommande) AND p.dateSuppression IS NULL')
->setParameters(array('typeDocumentCommercial' => TypeDocumentCommercial::COMMANDE,'statutCommande'=>$statutCommande))
;
$res = $query->getQuery()->getOneOrNullResult();
return $res;
*/
}
public function getCa($debut, $fin, $compteMarketPlace = "")
{
$query = $this->createQueryBuilder('p')
->select("SUM(COALESCE(p.total,0)+COALESCE(p.fraisPortSupplementaire,0)+COALESCE(p.totalFraisPort,0)) as total")
//->select("SUM(p.total+p.fraisPortSupplementaire+p.totalFraisPort) as total")
/*
->where('p.typeDocumentCommercial = :typeDocumentCommercial AND p.dateSuppression IS NULL AND p.date >= :debut AND p.date <= :fin')
->setParameters(array('typeDocumentCommercial' => TypeDocumentCommercial::COMMANDE,'debut'=>$debut,'fin'=>$fin))
*
*/
->where('p.statutCommande = :statutCommande AND p.dateSuppression IS NULL AND p.date >= :debut AND p.date <= :fin')
->setParameters(['statutCommande' => 22, 'debut' => $debut, 'fin' => $fin])//->setMaxResults(1)
;
$res = $query->getQuery()->getOneOrNullResult();
$join = "";
$where = "";
if ($compteMarketPlace == "") {
$where .= " and u.compte_market_place_id is null";
} else {
$where .= " and u.compte_market_place_id = " . $compteMarketPlace;
}
$sql = "
SELECT SUM(COALESCE(c.total,0)+COALESCE(c.frais_port_supplementaire,0)+COALESCE(c.total_frais_port,0)) as total,SUM(COALESCE(c.marge,0)) as total_marge
FROM `commerciale__commande` as c
LEFT JOIN commerciale__commande as f on c.facture_id = f.id
LEFT JOIN client__client as u on u.id = c.client_id
WHERE
(
(c.type_document_commercial_id = " . TypeDocumentCommercial::AVOIR . " AND c.statut_commande_id != 19 AND (c.multi_bl != 1 or c.multi_bl is null) AND c.date >= '" . $debut->format(
"Y-m-d H:i:s"
) . "' AND c.date <= '" . $fin->format("Y-m-d H:i:s") . "')
OR
(c.type_document_commercial_id = " . TypeDocumentCommercial::FACTURE . " AND c.statut_commande_id != 23 AND (c.multi_bl != 1 or c.multi_bl is null) AND c.date >= '" . $debut->format(
"Y-m-d H:i:s"
) . "' AND c.date <= '" . $fin->format("Y-m-d H:i:s") . "')
OR
(c.type_document_commercial_id = " . TypeDocumentCommercial::BL . " AND c.statut_commande_id != 25 AND c.facture_id > 0 AND f.multi_bl = 1
AND f.statut_commande_id != 23
and
f.date >= '" . $debut->format("Y-m-d H:i:s") . "' AND f.date <= '" . $fin->format("Y-m-d H:i:s") . "'
)
)
";
/*
$sql = "
SELECT SUM(COALESCE(c.total,0)+COALESCE(c.frais_port_supplementaire,0)+COALESCE(c.total_frais_port,0)) as total,SUM(COALESCE(c.marge,0)) as total_marge
FROM `commerciale__commande` as c
LEFT JOIN commerciale__commande as f on c.facture_id = f.id
LEFT JOIN client__client as u on u.id = c.client_id
WHERE
(
(c.type_document_commercial_id = ".TypeDocumentCommercial::AVOIR." AND c.statut_commande_id != 19 AND (c.multi_bl != 1 or c.multi_bl is null) AND c.date >= '".$debut->format("Y-m-d H:i:s")."' AND c.date <= '".$fin->format("Y-m-d H:i:s")."')
OR
(c.type_document_commercial_id = ".TypeDocumentCommercial::FACTURE." AND c.statut_commande_id != 23 AND (c.multi_bl != 1 or c.multi_bl is null) AND c.date >= '".$debut->format("Y-m-d H:i:s")."' AND c.date <= '".$fin->format("Y-m-d H:i:s")."')
OR
(c.type_document_commercial_id = ".TypeDocumentCommercial::BL." AND c.statut_commande_id != 25 AND c.facture_id > 0 AND f.multi_bl = 1
AND f.statut_commande_id != 23
and
f.date >= '".$debut->format("Y-m-d H:i:s")."' AND f.date <= '".$fin->format("Y-m-d H:i:s")."'
)
)
";*/
$sql .= $where;
$sql = trim($sql);
if ($compteMarketPlace == "") {
// echo $sql."<br/><br/><br/>";
}
$em = $this->getEntityManager();
$stmt = $em->getConnection()->prepare($sql);
$totaux = $stmt->executeQuery()->fetchAllAssociative();
return $totaux["0"];
//return $res;
}
public function getCaComptoir($debut, $fin)
{
$query = $this->createQueryBuilder('p')
->select("SUM(COALESCE(p.total,0)+COALESCE(p.fraisPortSupplementaire,0)+COALESCE(p.totalFraisPort,0)) as total")
//->select("SUM(p.total+p.fraisPortSupplementaire+p.totalFraisPort) as total")
->join('p.commande', 'c')
/*
->where('p.typeDocumentCommercial = :typeDocumentCommercial AND p.dateSuppression IS NULL AND p.date >= :debut AND p.date <= :fin')
->setParameters(array('typeDocumentCommercial' => TypeDocumentCommercial::COMMANDE,'debut'=>$debut,'fin'=>$fin))
*
*/
->where(
'p.statutCommande = :statutCommande AND p.dateSuppression IS NULL AND p.date >= :debut AND p.date <= :fin and c.typeDocumentCommercial = :typeDocumentCommercial'
)
->setParameters(['statutCommande' => 22, 'debut' => $debut, 'fin' => $fin, 'typeDocumentCommercial' => TypeDocumentCommercial::COMMANDE])//->setMaxResults(1)
;
$res = $query->getQuery()->getOneOrNullResult();
return $res;
}
public function getCaOr($debut, $fin)
{
$query = $this->createQueryBuilder('p')
->select("SUM(COALESCE(p.total,0)+COALESCE(p.fraisPortSupplementaire,0)+COALESCE(p.totalFraisPort,0)) as total")
//->select("SUM(p.total+p.fraisPortSupplementaire+p.totalFraisPort) as total")
->join('p.commande', 'c')
/*
->where('p.typeDocumentCommercial = :typeDocumentCommercial AND p.dateSuppression IS NULL AND p.date >= :debut AND p.date <= :fin')
->setParameters(array('typeDocumentCommercial' => TypeDocumentCommercial::COMMANDE,'debut'=>$debut,'fin'=>$fin))
*
*/
->where(
'p.statutCommande = :statutCommande AND p.dateSuppression IS NULL AND p.date >= :debut AND p.date <= :fin and c.typeDocumentCommercial = :typeDocumentCommercial'
)
->setParameters(['statutCommande' => 22, 'debut' => $debut, 'fin' => $fin, 'typeDocumentCommercial' => TypeDocumentCommercial::ORDREREPARATION])//->setMaxResults(1)
;
$res = $query->getQuery()->getOneOrNullResult();
return $res;
}
public function listeCommandeEnCours()
{
$repo_statut_commande = $this->getEntityManager()->getRepository(StatutCommande::class);
$liste_statut = $repo_statut_commande->findBy(["documentCommercial" => 2, "ordre" => [0, 1]]);
$query = $this->createQueryBuilder('p')
->where('p.typeDocumentCommercial = :typeDocumentCommercial AND p.statutCommande NOT IN (:statutCommande) AND p.dateSuppression IS NULL AND p.visible = :visible')
->setParameters(['typeDocumentCommercial' => TypeDocumentCommercial::COMMANDE, 'statutCommande' => $liste_statut, 'visible' => 1])
->orderBy('p.dateMaj', 'DESC')//->setMaxResults(100)
;
$res = $query->getQuery()->getResult();
return $res;
}
public function listeCommandeEnCoursPourReception($articles = [])
{
$repo_statut_commande = $this->getEntityManager()->getRepository(StatutCommande::class);
//$liste_statut = $repo_statut_commande->findBy(array("documentCommercial"=>2,"ordre"=>array(0,6)));
$liste_statut = $repo_statut_commande->findBy(["documentCommercial" => 2, "id" => [7, 29, 6, 29]]);
$query = $this->createQueryBuilder('p')
->join('p.articleCommande', 'ac')
->join('ac.article', 'a')
->where(
'a.id IN (:idsarticles) AND p.typeDocumentCommercial = :typeDocumentCommercial AND p.statutCommande NOT IN (:statutCommande) AND p.dateSuppression IS NULL AND p.visible = :visible'
)
->setParameters(['idsarticles' => $articles, 'typeDocumentCommercial' => TypeDocumentCommercial::COMMANDE, 'statutCommande' => $liste_statut, 'visible' => 1])
->orderBy('p.dateMaj', 'DESC')//->setMaxResults(2)
;
$res = $query->getQuery()->getResult();
return $res;
}
public function listeCommandeEnCours2()
{
$repo_statut_commande = $this->getEntityManager()->getRepository(StatutCommande::class);
$liste_statut = $repo_statut_commande->findBy(["documentCommercial" => 2, "ordre" => [0, 6, 10]]);
$query = $this->createQueryBuilder('p')
->where('p.typeDocumentCommercial = :typeDocumentCommercial AND p.statutCommande NOT IN (:statutCommande) AND p.dateSuppression IS NULL AND p.visible = :visible')
->setParameters(['typeDocumentCommercial' => TypeDocumentCommercial::COMMANDE, 'statutCommande' => $liste_statut, 'visible' => 1])
->orderBy('p.dateMaj', 'DESC')//->setMaxResults(100)
;
$res = $query->getQuery()->getResult();
return $res;
}
public function listeDevisEnCoursV2()
{
$query = $this->createQueryBuilder('p')
->where('p.typeDocumentCommercial = :typeDocumentCommercial AND p.dateSuppression IS NULL AND p.visible = :visible')
->setParameters(['typeDocumentCommercial' => TypeDocumentCommercial::DEVIS, 'visible' => 1])
->orderBy('p.dateMaj', 'DESC')//->setMaxResults(100)
;
$res = $query->getQuery()->getResult();
return $res;
}
public function listeOrEnCours()
{
$repo_statut_commande = $this->getEntityManager()->getRepository(StatutCommande::class);
$liste_statut = $repo_statut_commande->findBy(["documentCommercial" => 3, "ordre" => [2, 3]]);
$query = $this->createQueryBuilder('p')
->where('p.typeDocumentCommercial = :typeDocumentCommercial AND p.statutCommande IN (:statutCommande) AND p.dateSuppression IS NULL')
->setParameters(['typeDocumentCommercial' => TypeDocumentCommercial::ORDREREPARATION, 'statutCommande' => $liste_statut])
->orderBy('p.date', 'ASC');
$res = $query->getQuery()->getResult();
return $res;
}
public function listeDevisEnCours()
{
$repo_statut_commande = $this->getEntityManager()->getRepository(StatutCommande::class);
$liste_statut = $repo_statut_commande->findBy(["documentCommercial" => 1, "ordre" => [2, 3]]);
$query = $this->createQueryBuilder('p')
//->where('p.typeDocumentCommercial = :typeDocumentCommercial AND p.statutCommande IN (:statutCommande) AND p.dateSuppression IS NULL')
->where('p.typeDocumentCommercial = :typeDocumentCommercial AND p.dateSuppression IS NULL AND p.commande IS NULL')
->setParameters(['typeDocumentCommercial' => TypeDocumentCommercial::DEVIS]);
$res = $query->getQuery()->getResult();
return $res;
}
public function getTotalHeuresFactureesDsPeriode($dateDebut, $dateFin, $mecanicien = null)
{
if ($mecanicien == null) {
$query = $this->createQueryBuilder('p')
->select("SUM(COALESCE(ac.quantite,0)) as total")
->join('p.articleCommande', 'ac')
->join('ac.article', 'a')
->where('p.date > :dateDebut and p.date < :dateFin AND p.typeDocumentCommercial IN (:typeDocumentCommercial) AND a.mainOeuvre = :mainOeuvre')
->setParameters(['dateDebut' => $dateDebut, 'dateFin' => $dateFin, 'typeDocumentCommercial' => [TypeDocumentCommercial::COMMANDE, TypeDocumentCommercial::ORDREREPARATION], 'mainOeuvre' => true])
->orderBy('p.date', 'DESC');
$res = $query->getQuery()->getOneOrNullResult();
return $res['total'];
} else {
$query = $this->createQueryBuilder('p')
->select("p.id, SUM(COALESCE(ac.quantite,0)) as total")
->join('p.articleCommande', 'ac')
->join('ac.article', 'a')
->where('p.date > :dateDebut and p.date < :dateFin AND p.typeDocumentCommercial IN (:typeDocumentCommercial) AND a.mainOeuvre = :mainOeuvre')
->setParameters(['dateDebut' => $dateDebut, 'dateFin' => $dateFin, 'typeDocumentCommercial' => [TypeDocumentCommercial::COMMANDE, TypeDocumentCommercial::ORDREREPARATION], 'mainOeuvre' => true])
->orderBy('p.date', 'DESC');
$res = $query->getQuery()->getResult();
$repo_commande = $this->getEntityManager()->getRepository(Commande::class);
$prorata = 0;
$tab_temp = [];
$tab_or = [];
foreach ($res as $re) {
if (isset($re['id']) && $re['id'] != null) {
$facture = $repo_commande->find($re['id']);
if (is_object($facture)) {
//$or = $facture->getCommande();
$or = $facture;
if (is_object($or)) {
$interventions = $or->getInterventions();
foreach ($interventions as $intervention) {
if ($intervention->getMecanicien()->getId() == $mecanicien) {
if (!in_array($intervention->getId(), $tab_temp)) {
$tab_temp[] = $intervention->getId();
$tab_or[] = $or->getId();
}
}
}
}
}
}
}
$tab_intervention = [];
$total_intervention = 0;
$total_intervention_mecano = 0;
foreach ($res as $re) {
if (isset($re['id']) && $re['id'] != null) {
$facture = $repo_commande->find($re['id']);
if (is_object($facture)) {
$or = $facture;
if (is_object($or) and in_array($or->getId(), $tab_or)) {
$interventions = $or->getInterventions();
foreach ($interventions as $intervention) {
if (!array_key_exists($intervention->getArticleCommande()->getId(), $tab_intervention)) {
$tab_intervention[$intervention->getArticleCommande()->getId()] = [
"total_intervention" => "0",
"total_intervention_mecano" => "0",
"totale_duree" => $intervention->getArticleCommande()->getQuantite(),
];
}
$tab_intervention[$intervention->getArticleCommande()->getId()]["total_intervention"] += $intervention->getDuree();
if ($intervention->getMecanicien()->getId() == $mecanicien) {
//$total_intervention_mecano += $total_intervention_mecano->getDuree();
$tab_intervention[$intervention->getArticleCommande()->getId()]["total_intervention_mecano"] += $intervention->getDuree();
}
}
}
}
}
}
$prorata = 0;
//print_r($tab_intervention);
foreach ($tab_intervention as $key => $value) {
$prorata += $value['total_intervention_mecano'] / $value['total_intervention'] * $value['totale_duree'];
}
//$tab_duree_temp = array();
/*foreach ($res as $re){
if(isset($re['id']) && $re['id'] != null){
$facture = $repo_commande->find($re['id']);
if(is_object($facture)){
//$or = $facture->getCommande();
$or = $facture;
if(is_object($or)){
$interventions = $or->getInterventions();
foreach($interventions as $intervention){
if($intervention->getMecanicien()->getId() == $mecanicien) {
if (!in_array($intervention->getId(), $tab_temp)) {
$tab_temp[] = $intervention->getId();
}
}
}
$dureeTotale = 0;
$dureeTotaleMecanicien = 0;
foreach($interventions as $intervention){
echo "<div>IA ".$intervention->getId()."</div>";
if (in_array($intervention->getId(), $tab_temp) or 1==1) {
echo "<div>IB ".$intervention->getId()."</div>";
$dureeTotale += $intervention->getDuree();
if($intervention->getMecanicien()->getId() == $mecanicien) {
$dureeTotaleMecanicien += $intervention->getDuree();
}
}
}
echo "<div>dureeTotale ".$dureeTotale."</div>";
echo "<div>dureeTotaleMecanicien ".$dureeTotaleMecanicien."</div>";
echo "<div>total ".$re['total']."</div>";
if($dureeTotale != 0) {
$prorata += $re['total'] / $dureeTotale * $dureeTotaleMecanicien;
}
}
}
}
}
*/
return $prorata;
}
}
public function ____getTotalHeuresFactureesDsPeriode($dateDebut, $dateFin, $mecanicien = null)
{
if ($mecanicien == null) {
$query = $this->createQueryBuilder('p')
->select("SUM(COALESCE(ac.quantite,0)) as total")
->join('p.articleCommande', 'ac')
->join('ac.article', 'a')
->where('p.date > :dateDebut and p.date < :dateFin AND p.typeDocumentCommercial = :typeDocumentCommercial AND a.mainOeuvre = :mainOeuvre')
->setParameters(['dateDebut' => $dateDebut, 'dateFin' => $dateFin, 'typeDocumentCommercial' => TypeDocumentCommercial::FACTURE, 'mainOeuvre' => true])
->orderBy('p.date', 'DESC');
$res = $query->getQuery()->getOneOrNullResult();
return $res['total'];
} else {
$query = $this->createQueryBuilder('p')
->select("p.id, SUM(COALESCE(ac.quantite,0)) as total")
->join('p.articleCommande', 'ac')
->join('ac.article', 'a')
->where('p.date > :dateDebut and p.date < :dateFin AND p.typeDocumentCommercial = :typeDocumentCommercial AND a.mainOeuvre = :mainOeuvre')
->setParameters(['dateDebut' => $dateDebut, 'dateFin' => $dateFin, 'typeDocumentCommercial' => TypeDocumentCommercial::FACTURE, 'mainOeuvre' => true])
->orderBy('p.date', 'DESC');
$res = $query->getQuery()->getResult();
$repo_commande = $this->getEntityManager()->getRepository(Commande::class);
$prorata = 0;
foreach ($res as $re) {
if (isset($re['id']) && $re['id'] != null) {
$facture = $repo_commande->find($re['id']);
if (is_object($facture)) {
$or = $facture->getCommande();
if (is_object($or)) {
$interventions = $or->getInterventions();
$dureeTotale = 0;
$dureeTotaleMecanicien = 0;
foreach ($interventions as $intervention) {
$dureeTotale += $intervention->getDuree();
if ($intervention->getMecanicien()->getId() == $mecanicien) {
$dureeTotaleMecanicien += $intervention->getDuree();
}
}
if ($dureeTotale != 0) {
$prorata += $re['total'] / $dureeTotale * $dureeTotaleMecanicien;
}
}
}
}
}
return $prorata;
}
}
public function getTotalHeuresMoFacture($commande)
{
/*$query = $this->createQueryBuilder('p')
->select("SUM(ac.quantite) as total")
->join('p.articleCommande', 'ac')
->join('ac.article', 'a')
->where('p.typeDocumentCommercial = :typeDocumentCommercial AND a.mainOeuvre = :mainOeuvre AND p.commande = :commande')
->setParameters(array('typeDocumentCommercial' => TypeDocumentCommercial::FACTURE, 'mainOeuvre'=>true, 'commande'=>$commande))
->orderBy('p.date', 'DESC')
*/
$query = $this->createQueryBuilder('p')
->select("SUM(COALESCE(ac.quantite,0)) as total")
->join('p.articleCommande', 'ac')
->join('ac.article', 'a')
->where('p.typeDocumentCommercial = :typeDocumentCommercial AND a.mainOeuvre = :mainOeuvre AND p.id = :commande')
->setParameters(['typeDocumentCommercial' => TypeDocumentCommercial::ORDREREPARATION, 'mainOeuvre' => true, 'commande' => $commande])
->orderBy('p.date', 'DESC');
$res = $query->getQuery()->getOneOrNullResult();
if (count($res) > 0) {
return $res['total'];
} else {
return 0;
}
}
public function getFacturesEtAvoirsAtransfererEnCompta($date = '', $export = '')
{
if ($date == '') {
$date = new Datetime();
}
$where = 'p.dateSuppression IS NULL AND p.date <= :date AND p.typeDocumentCommercial IN (:types) AND sc.ordre NOT IN (:statutCommande)';
$parameters = [
'date' => $date->format("Y-m-d 23:59:59"),
'types' => [6, 7],//Facture et avoirs
'statutCommande' => [0],
];
if (is_object($export)) {
$where .= ' AND p.exportCompta = :exportCompta';
$parameters['exportCompta'] = $export->getId();
} else {
//$where .= ' AND p.dateTransfertCompta IS NULL';
$where .= ' AND p.exportCompta IS NULL';
}
$query = $this->createQueryBuilder('p')
->join('p.statutCommande', 'sc')
->where($where)
->setParameters($parameters);
return $query->getQuery()->getResult();
}
public function getFacturesEtAvoirsByCommande(Commande $commande)
{
$where = 'p.dateSuppression IS NULL AND p.typeDocumentCommercial IN (:types) AND sc.ordre NOT IN (:statutCommande) AND p.commande = :commande';
$parameters = [
'types' => [6, 7],//Facture et avoirs
'statutCommande' => [0],
'commande' => $commande,
];
$query = $this->createQueryBuilder('p')
//->select("p.id")
->join('p.statutCommande', 'sc')
->where($where)
->setParameters($parameters);
return $query->getQuery()->getResult();
}
public function topClients($parametres = [])
{
if (!array_key_exists('n1', $parametres)) {
$parametres["n1"] = "0";
}
//if(intval($parametres['nbel'])>500) $parametres['nbel'] = 500;
$dateDebut = DateTime::createFromFormat('d/m/Y', $parametres['date_debut']);
$dateDebut->setTime(00, 00, 00);
$dateFin = DateTime::createFromFormat('d/m/Y', $parametres['date_fin']);
$dateFin->setTime(23, 59, 59);
$where = "";
$join = "";
$join_table_client = false;
$join_table_article = false;
$inclure_frais_de_port = true;
if (array_key_exists('ref_client', $parametres) and $parametres["ref_client"] > 0) {
$join .= " LEFT JOIN client__client as clt on c.client_id = clt.id";
$where .= " AND clt.reference like '" . $parametres["ref_client"] . "%'";
$join_table_client = true;
}
if (array_key_exists('nom_client', $parametres) and $parametres["nom_client"] != "") {
//if(!$join_table_client) $join .= " LEFT JOIN client__client as clt on c.client_id = clt.id";
$where .= " AND u.nom like '%" . $parametres["nom_client"] . "%'";
$join_table_client = true;
}
if (array_key_exists('client', $parametres) and $parametres["client"] != "") {
//if(!$join_table_client) $join .= " LEFT JOIN client__client as clt on c.client_id = clt.id";
$where .= " AND u.id = '" . $parametres["client"] . "'";
$join_table_client = true;
}
if (array_key_exists('equipier', $parametres) and $parametres["equipier"] > 0) {
$where .= " AND c.utilisateur_id = '" . $parametres["equipier"] . "'";
}
if (array_key_exists('marque', $parametres) and $parametres["marque"] > 0) {
//echo "MARQUE";
//$join .= " LEFT JOIN commerciale__article_commande as ac on ac.commande_id = c.id";
$join .= " LEFT JOIN article__article as ar on ar.id = ac.article_id";
$where .= " AND ar.marque_id = '" . $parametres["marque"] . "'";
$join_table_article = true;
$inclure_frais_de_port = false;
}
if (array_key_exists('article', $parametres) and $parametres["article"] > 0) {
if (!$join_table_article) {
//$join .= " LEFT JOIN commerciale__article_commande as ac on ac.commande_id = c.id";
$join .= " LEFT JOIN article__article as ar on ar.id = ac.article_id";
}
$where .= " AND ar.id = '" . $parametres["article"] . "'";
$join_table_article = true;
$inclure_frais_de_port = false;
}
if (array_key_exists('categorie_client', $parametres) and $parametres["categorie_client"] > 0) {
if (!$join_table_client) {
$join .= " LEFT JOIN client__client as clt on c.client_id = clt.id";
}
//$join .= " LEFT JOIN client__client_categorie as cltcat on cltcat.client_id = u.id";
if (array_key_exists('sous_categorie_client', $parametres) and $parametres["sous_categorie_client"] > 0) {
//$where .= " AND cltcat.categorie_id = '".$parametres["sous_categorie_client"]."'";
$where .= " AND clt.id IN (select distinct(client_id) from client__client_categorie where dateSuppression is null and categorie_id = " . $parametres["sous_categorie_client"] . ")";
} else {
//$where .= " AND cltcat.categorie_id = '".$parametres["categorie_client"]."'";
$where .= " AND clt.id IN (select distinct(client_id) from client__client_categorie where dateSuppression is null and categorie_id = " . $parametres["categorie_client"] . ")";
}
}
if (array_key_exists('categorie_article', $parametres) and $parametres["categorie_article"] > 0) {
if (!$join_table_article) {
//$join .= " LEFT JOIN commerciale__article_commande as ac on ac.commande_id = c.id";
$join .= " LEFT JOIN article__article as ar on ar.id = ac.article_id";
}
//$join .= " LEFT JOIN article__article_categorie as artcat on artcat.article_id = ar.id";
//$where .= " AND artcat.categorie_id = '".$parametres["categorie_article"]."'";
$join_table_article = true;
$inclure_frais_de_port = false;
$where .= " AND ( ar.id IN (select distinct(article_id) from article__article_categorie where categorie_id = " . $parametres["categorie_article"] . ")";
if (array_key_exists('sous_categorie_article', $parametres) and $parametres["sous_categorie_article"] > 0) {
//$join .= " LEFT JOIN commerciale__article_commande as ac on ac.commande_id = c.id";
//$join .= " LEFT JOIN article__article as ar2 on ar2.id = ac.article_id";
//$join .= " LEFT JOIN article__article_categorie as artcat2 on artcat2.article_id = ar2.id";
//$where .= " AND artcat2.categorie_id = '".$parametres["sous_categorie_article"]."'";
$join_table_article = true;
$inclure_frais_de_port = false;
$where .= " AND ar.id IN (select distinct(article_id) from article__article_categorie where categorie_id = " . $parametres["sous_categorie_article"] . ")";
if (array_key_exists('sous_sous_categorie_article', $parametres) and $parametres["sous_sous_categorie_article"] > 0) {
//$join .= " LEFT JOIN commerciale__article_commande as ac on ac.commande_id = c.id";
//$join .= " LEFT JOIN article__article as ar3 on ar3.id = ac.article_id";
//$join .= " LEFT JOIN article__article_categorie as artcat3 on artcat3.article_id = ar2.id";
//$where .= " AND artcat3.categorie_id = '".$parametres["sous_sous_categorie_article"]."'";
$join_table_article = true;
$inclure_frais_de_port = false;
$where .= " AND ar.id IN (select distinct(article_id) from article__article_categorie where categorie_id = " . $parametres["sous_sous_categorie_article"] . ")";
}
}
$where .= " )";
}
//SELECT SUM(ac.total_ht+ac.tva_vente) as total,u.prenom,u.nom,u.reference,u.id as client_id
/*
$sql = "
SELECT SUM(ac.total_ht) as total,u.prenom,u.nom,u.reference,u.id as client_id
FROM `commerciale__article_commande` as ac
LEFT JOIN commerciale__commande as c on c.id = ac.commande_id
LEFT JOIN commerciale__commande as f on c.facture_id = f.id
LEFT JOIN client__client as u on u.id = c.client_id
".$join."
WHERE
c.date >= '".$dateDebut->format('Y-m-d H:i:s')."' AND c.date <= '".$dateFin->format('Y-m-d H:i:s')."'
AND
(
(c.type_document_commercial_id = ".TypeDocumentCommercial::FACTURE." AND c.statut_commande_id != 23 AND c.multi_bl != 1)
OR
(c.type_document_commercial_id = ".TypeDocumentCommercial::BL." AND c.statut_commande_id != 24 AND c.facture_id > 0 AND f.multi_bl = 1
AND f.statut_commande_id != 23
)
)
".$where."
GROUP BY c.client_id
ORDER BY total DESC
LIMIT 0,".intval($parametres['nbel'])."
";
*/
//SUM(p.total+p.fraisPortSupplementaire+p.totalFraisPort) as total
if ($inclure_frais_de_port) {
$sum = "SUM(COALESCE(c.total,0)+COALESCE(c.frais_port_supplementaire,0)+COALESCE(c.total_frais_port,0)) as total";
$sql = "
SELECT " . $sum . ",u.prenom,u.nom,u.reference,u.id as client_id
FROM `commerciale__commande` as c
LEFT JOIN commerciale__commande as f on c.facture_id = f.id
LEFT JOIN client__client as u on u.id = c.client_id
" . $join . "
WHERE
(
(c.type_document_commercial_id = " . TypeDocumentCommercial::AVOIR . " AND c.statut_commande_id != 19 AND c.multi_bl != 1 AND c.date >= '" . $dateDebut->format(
'Y-m-d H:i:s'
) . "' AND c.date <= '" . $dateFin->format('Y-m-d H:i:s') . "')
OR
(c.type_document_commercial_id = " . TypeDocumentCommercial::FACTURE . " AND c.statut_commande_id != 23 AND c.multi_bl != 1 AND c.date >= '" . $dateDebut->format(
'Y-m-d H:i:s'
) . "' AND c.date <= '" . $dateFin->format('Y-m-d H:i:s') . "')
OR
(c.type_document_commercial_id = " . TypeDocumentCommercial::BL . " AND c.statut_commande_id != 24 AND c.facture_id > 0 AND f.multi_bl = 1
AND f.statut_commande_id != 23
and
((f.date >= '" . $dateDebut->format('Y-m-d H:i:s') . "' AND f.date <= '" . $dateFin->format('Y-m-d H:i:s') . "'))
)
)
" . $where . "
GROUP BY c.client_id
ORDER BY total DESC
LIMIT 0," . intval($parametres['nbel']) . "
";
//echo $sql;
} else {
$sum = "SUM(COALESCE(ac.total_ht,0)) as total";
$sql = "
SELECT " . $sum . ",u.prenom,u.nom,u.reference,u.id as client_id
FROM `commerciale__article_commande` as ac
LEFT JOIN commerciale__commande as c on c.id = ac.commande_id
LEFT JOIN commerciale__commande as f on c.facture_id = f.id
LEFT JOIN client__client as u on u.id = c.client_id
" . $join . "
WHERE
(
(c.type_document_commercial_id = " . TypeDocumentCommercial::AVOIR . " AND c.statut_commande_id != 19 AND c.multi_bl != 1 AND c.date >= '" . $dateDebut->format(
'Y-m-d H:i:s'
) . "' AND c.date <= '" . $dateFin->format('Y-m-d H:i:s') . "')
OR
(c.type_document_commercial_id = " . TypeDocumentCommercial::FACTURE . " AND c.statut_commande_id != 23 AND c.multi_bl != 1 AND c.date >= '" . $dateDebut->format(
'Y-m-d H:i:s'
) . "' AND c.date <= '" . $dateFin->format('Y-m-d H:i:s') . "')
OR
(c.type_document_commercial_id = " . TypeDocumentCommercial::BL . " AND c.statut_commande_id != 24 AND c.facture_id > 0 AND f.multi_bl = 1
AND f.statut_commande_id != 23
and
((f.date >= '" . $dateDebut->format('Y-m-d H:i:s') . "' AND f.date <= '" . $dateFin->format('Y-m-d H:i:s') . "'))
)
)
" . $where . "
GROUP BY c.client_id
ORDER BY total DESC
LIMIT 0," . intval($parametres['nbel']) . "
";
}
$sql = trim($sql);
//echo "<br/><br/>".$sql;
$em = $this->getEntityManager();
$stmt = $em->getConnection()->prepare($sql);
$clients = $stmt->executeQuery()->fetchAllAssociative();
$cpt = 0;
for ($i = 0; $i < count($clients); $i++) {
$qte = "";
$where_temp = $where . " AND c.client_id = " . $clients[$i]["client_id"];
$sql = "
SELECT sum(COALESCE(quantite,0)) as total_qte
FROM `commerciale__article_commande` as ac
LEFT JOIN commerciale__commande as c on c.id = ac.commande_id
LEFT JOIN commerciale__commande as f on c.facture_id = f.id
LEFT JOIN client__client as u on u.id = c.client_id
" . $join . "
WHERE
(
(c.type_document_commercial_id = " . TypeDocumentCommercial::AVOIR . " AND c.statut_commande_id != 19 AND c.multi_bl != 1 AND c.date >= '" . $dateDebut->format(
'Y-m-d H:i:s'
) . "' AND c.date <= '" . $dateFin->format('Y-m-d H:i:s') . "')
OR
(c.type_document_commercial_id = " . TypeDocumentCommercial::FACTURE . " AND c.statut_commande_id != 23 AND c.multi_bl != 1 AND c.date >= '" . $dateDebut->format(
'Y-m-d H:i:s'
) . "' AND c.date <= '" . $dateFin->format('Y-m-d H:i:s') . "')
OR
(c.type_document_commercial_id = " . TypeDocumentCommercial::BL . " AND c.statut_commande_id != 24 AND c.facture_id > 0 AND f.multi_bl = 1
AND f.statut_commande_id != 23
and
((f.date >= '" . $dateDebut->format('Y-m-d H:i:s') . "' AND f.date <= '" . $dateFin->format('Y-m-d H:i:s') . "'))
)
)
" . $where_temp . "
";
$sql = trim($sql);
//echo "<br/><br/>".$sql;
$em = $this->getEntityManager();
$stmt = $em->getConnection()->prepare($sql);
$client_qte = $stmt->executeQuery()->fetchAllAssociative();
$clients[$i]["qte"] = $client_qte[0]["total_qte"];
if ($inclure_frais_de_port) {
//////////
$where_temp = $where . " AND c.client_id = " . $clients[$i]["client_id"];
$sql = "
SELECT count(*) as qte ,t.id as transporteur_id
FROM `commerciale__commande` as c
LEFT JOIN commerciale__commande as f on c.facture_id = f.id
LEFT JOIN client__client as u on u.id = c.client_id
LEFT JOIN transporteur__transporteur as t on t.id = c.transporteur_id
" . $join . "
WHERE
c.transporteur_id is not null AND
(
(c.type_document_commercial_id = " . TypeDocumentCommercial::FACTURE . " AND c.statut_commande_id != 23 AND c.multi_bl != 1 AND
((c.date >= '" . $dateDebut->format('Y-m-d H:i:s') . "' AND c.date <= '" . $dateFin->format('Y-m-d H:i:s') . "'))
)
OR
(c.type_document_commercial_id = " . TypeDocumentCommercial::BL . " AND c.statut_commande_id != 24 AND c.facture_id > 0 AND f.multi_bl = 1
AND f.statut_commande_id != 23
and
((f.date >= '" . $dateDebut->format('Y-m-d H:i:s') . "' AND f.date <= '" . $dateFin->format('Y-m-d H:i:s') . "'))
)
)
" . $where_temp . "
";
//echo $sql."<br/><br/>";
$sql = trim($sql);
$em = $this->getEntityManager();
$stmt = $em->getConnection()->prepare($sql);
$transports = $stmt->executeQuery()->fetchAllAssociative();
if (count($transports) > 0) {
for ($r = 0; $r < count($transports); $r++) {
$clients[$i]["qte"] += $transports[$r]["qte"];
}
}
}
}
if (array_key_exists('tri', $parametres) && $parametres["tri"] == "qte") {
$qte = [];
foreach ($clients as $key => $row) {
$qte[$key] = floatVal($row['qte']);
}
array_multisort($qte, SORT_DESC, $clients);
}
return $clients;
}
public function topClientsDetailsTransport($parametres = [])
{
if (!array_key_exists('n1', $parametres)) {
$parametres["n1"] = "0";
}
//print_r($parametres);
//if(intval($parametres['nbel'])>500) $parametres['nbel'] = 500;
$dateDebut = DateTime::createFromFormat('d/m/Y', $parametres['date_debut']);
$dateDebut->setTime(00, 00, 00);
$dateFin = DateTime::createFromFormat('d/m/Y', $parametres['date_fin']);
$dateFin->setTime(23, 59, 59);
$where = "";
$join = "";
$join_table_client = false;
$join_table_article = false;
$inclure_frais_de_port = true;
if (array_key_exists('ref_client', $parametres) and $parametres["ref_client"] > 0) {
$join .= " LEFT JOIN client__client as clt on c.client_id = clt.id";
$where .= " AND clt.reference like '" . $parametres["ref_client"] . "%'";
$join_table_client = true;
}
if (array_key_exists('nom_client', $parametres) and $parametres["nom_client"] != "") {
//if(!$join_table_client) $join .= " LEFT JOIN client__client as clt on c.client_id = clt.id";
$where .= " AND u.nom like '%" . $parametres["nom_client"] . "%'";
$join_table_client = true;
}
if (array_key_exists('client', $parametres) and $parametres["client"] != "") {
//if(!$join_table_client) $join .= " LEFT JOIN client__client as clt on c.client_id = clt.id";
$where .= " AND u.id = '" . $parametres["client"] . "'";
$join_table_client = true;
}
if (array_key_exists('equipier', $parametres) and $parametres["equipier"] > 0) {
$where .= " AND c.utilisateur_id = '" . $parametres["equipier"] . "'";
}
if (array_key_exists('marque', $parametres) and $parametres["marque"] > 0) {
//echo "MARQUE";
//$join .= " LEFT JOIN commerciale__article_commande as ac on ac.commande_id = c.id";
$join .= " LEFT JOIN article__article as ar on ar.id = ac.article_id";
$where .= " AND ar.marque_id = '" . $parametres["marque"] . "'";
$join_table_article = true;
$inclure_frais_de_port = false;
}
if (array_key_exists('article', $parametres) and $parametres["article"] > 0) {
if (!$join_table_article) {
//$join .= " LEFT JOIN commerciale__article_commande as ac on ac.commande_id = c.id";
$join .= " LEFT JOIN article__article as ar on ar.id = ac.article_id";
}
$where .= " AND ar.id = '" . $parametres["article"] . "'";
$join_table_article = true;
$inclure_frais_de_port = false;
}
if (array_key_exists('categorie_client', $parametres) and $parametres["categorie_client"] > 0) {
if (!$join_table_client) {
$join .= " LEFT JOIN client__client as clt on c.client_id = clt.id";
}
$join .= " LEFT JOIN client__client_categorie as cltcat on cltcat.client_id = u.id";
if (array_key_exists('sous_categorie_client', $parametres) and $parametres["sous_categorie_client"] > 0) {
$where .= " AND cltcat.categorie_id = '" . $parametres["sous_categorie_client"] . "'";
} else {
$where .= " AND cltcat.categorie_id = '" . $parametres["categorie_client"] . "'";
}
}
if (array_key_exists('categorie_article', $parametres) and $parametres["categorie_article"] > 0) {
if (!$join_table_article) {
//$join .= " LEFT JOIN commerciale__article_commande as ac on ac.commande_id = c.id";
$join .= " LEFT JOIN article__article as ar on ar.id = ac.article_id";
}
$join .= " LEFT JOIN article__article_categorie as artcat on artcat.article_id = ar.id";
$where .= " AND artcat.categorie_id = '" . $parametres["categorie_article"] . "'";
$join_table_article = true;
$inclure_frais_de_port = false;
if (array_key_exists('sous_categorie_article', $parametres) and $parametres["sous_categorie_article"] > 0) {
//$join .= " LEFT JOIN commerciale__article_commande as ac on ac.commande_id = c.id";
$join .= " LEFT JOIN article__article as ar2 on ar2.id = ac.article_id";
$join .= " LEFT JOIN article__article_categorie as artcat2 on artcat2.article_id = ar2.id";
$where .= " AND artcat2.categorie_id = '" . $parametres["sous_categorie_article"] . "'";
$join_table_article = true;
$inclure_frais_de_port = false;
if (array_key_exists('sous_sous_categorie_article', $parametres) and $parametres["sous_sous_categorie_article"] > 0) {
//$join .= " LEFT JOIN commerciale__article_commande as ac on ac.commande_id = c.id";
$join .= " LEFT JOIN article__article as ar3 on ar3.id = ac.article_id";
$join .= " LEFT JOIN article__article_categorie as artcat3 on artcat3.article_id = ar2.id";
$where .= " AND artcat3.categorie_id = '" . $parametres["sous_sous_categorie_article"] . "'";
$join_table_article = true;
$inclure_frais_de_port = false;
}
}
}
$where .= " AND c.client_id = " . $parametres["client_id"];
$order_by = "total DESC ";
if (array_key_exists('tri', $parametres) && $parametres["tri"] == "qte") {
$order_by = "total_qte DESC ";
}
$articles = [];
$where .= " AND c.transporteur_id = " . $parametres["transporteur_id"];
//echo "AAAAAA";
$sql = "
SELECT count(*) as qte ,t.id as transporteur_id,t.reference,t.libelle,sum(COALESCE(c.frais_Port_supplementaire,0)+COALESCE(c.total_frais_port,0)) as total
FROM `commerciale__commande` as c
LEFT JOIN commerciale__commande as f on c.facture_id = f.id
LEFT JOIN client__client as u on u.id = c.client_id
LEFT JOIN transporteur__transporteur as t on t.id = c.transporteur_id
" . $join . "
WHERE
(
(c.type_document_commercial_id = " . TypeDocumentCommercial::AVOIR . " AND c.statut_commande_id != 19 AND c.multi_bl != 1 AND c.date >= '" . $dateDebut->format('Y-m-d H:i:s') . "' AND c.date <= '" . $dateFin->format(
'Y-m-d H:i:s'
) . "')
OR
(c.type_document_commercial_id = " . TypeDocumentCommercial::FACTURE . " AND c.statut_commande_id != 23 AND c.multi_bl != 1 AND c.date >= '" . $dateDebut->format('Y-m-d H:i:s') . "' AND c.date <= '" . $dateFin->format(
'Y-m-d H:i:s'
) . "')
OR
(c.type_document_commercial_id = " . TypeDocumentCommercial::BL . " AND c.statut_commande_id != 24 AND c.facture_id > 0 AND f.multi_bl = 1
AND f.statut_commande_id != 23
and
f.date >= '" . $dateDebut->format('Y-m-d H:i:s') . "' AND f.date <= '" . $dateFin->format('Y-m-d H:i:s') . "'
)
)
" . $where . "
";
$sql = trim($sql);
$em = $this->getEntityManager();
$stmt = $em->getConnection()->prepare($sql);
$transports = $stmt->executeQuery()->fetchAllAssociative();
if (count($transports) > 0) {
for ($r = 0; $r < count($transports); $r++) {
$tab_transport = [];
//sum(ac.quantite) as total_qte,ac.libelle,sum(ac.total_ht) as total,a.reference,a.id as article_id
$tab_transport["total_qte"] = $transports[$r]["qte"];
$tab_transport["libelle"] = $transports[$r]["libelle"];
$tab_transport["total"] = $transports[$r]["total"];
$tab_transport["reference"] = $transports[$r]["reference"];
$tab_transport["article_id"] = "";
$tab_transport["transporteur_id"] = $transports[$r]["transporteur_id"];
$articles[] = $tab_transport;
}
}
//echo $sql;
return $articles;
}
public function topClientsDetails($parametres = [])
{
if (!array_key_exists('n1', $parametres)) {
$parametres["n1"] = "0";
}
if (!array_key_exists('details_ajax', $parametres)) {
$parametres["details_ajax"] = "0";
}
//print_r($parametres);
//if(intval($parametres['nbel'])>500) $parametres['nbel'] = 500;
$dateDebut = DateTime::createFromFormat('d/m/Y', $parametres['date_debut']);
$dateDebut->setTime(00, 00, 00);
$dateFin = DateTime::createFromFormat('d/m/Y', $parametres['date_fin']);
$dateFin->setTime(23, 59, 59);
$where = "";
$join = "";
$join_table_client = false;
$join_table_article = false;
$inclure_frais_de_port = true;
$inclure_transporteur = true;
if (array_key_exists('ref_client', $parametres) and $parametres["ref_client"] > 0) {
$join .= " LEFT JOIN client__client as clt on c.client_id = clt.id";
$where .= " AND clt.reference like '" . $parametres["ref_client"] . "%'";
$join_table_client = true;
}
if (array_key_exists('nom_client', $parametres) and $parametres["nom_client"] != "") {
//if(!$join_table_client) $join .= " LEFT JOIN client__client as clt on c.client_id = clt.id";
$where .= " AND u.nom like '%" . $parametres["nom_client"] . "%'";
$join_table_client = true;
}
if (array_key_exists('client', $parametres) and $parametres["client"] != "") {
//if(!$join_table_client) $join .= " LEFT JOIN client__client as clt on c.client_id = clt.id";
$where .= " AND u.id = '" . $parametres["client"] . "'";
$join_table_client = true;
}
if (array_key_exists('equipier', $parametres) and $parametres["equipier"] > 0) {
$where .= " AND c.utilisateur_id = '" . $parametres["equipier"] . "'";
}
if (array_key_exists('marque', $parametres) and $parametres["marque"] > 0) {
//echo "MARQUE";
//$join .= " LEFT JOIN commerciale__article_commande as ac on ac.commande_id = c.id";
$join .= " LEFT JOIN article__article as ar on ar.id = ac.article_id";
$where .= " AND ar.marque_id = '" . $parametres["marque"] . "'";
$join_table_article = true;
$inclure_frais_de_port = false;
}
if (array_key_exists('article', $parametres) and $parametres["article"] > 0) {
if (!$join_table_article) {
//$join .= " LEFT JOIN commerciale__article_commande as ac on ac.commande_id = c.id";
$join .= " LEFT JOIN article__article as ar on ar.id = ac.article_id";
}
$where .= " AND ar.id = '" . $parametres["article"] . "'";
$join_table_article = true;
$inclure_frais_de_port = false;
}
if (array_key_exists('categorie_client', $parametres) and $parametres["categorie_client"] > 0) {
if (!$join_table_client) {
$join .= " LEFT JOIN client__client as clt on c.client_id = clt.id";
}
$join .= " LEFT JOIN client__client_categorie as cltcat on cltcat.client_id = u.id";
if (array_key_exists('sous_categorie_client', $parametres) and $parametres["sous_categorie_client"] > 0) {
$where .= " AND cltcat.categorie_id = '" . $parametres["sous_categorie_client"] . "'";
} else {
$where .= " AND cltcat.categorie_id = '" . $parametres["categorie_client"] . "'";
}
}
if (array_key_exists('categorie_article', $parametres) and $parametres["categorie_article"] > 0) {
if (!$join_table_article) {
//$join .= " LEFT JOIN commerciale__article_commande as ac on ac.commande_id = c.id";
$join .= " LEFT JOIN article__article as ar on ar.id = ac.article_id";
}
$join .= " LEFT JOIN article__article_categorie as artcat on artcat.article_id = ar.id";
$where .= " AND artcat.categorie_id = '" . $parametres["categorie_article"] . "'";
$join_table_article = true;
$inclure_frais_de_port = false;
if (array_key_exists('sous_categorie_article', $parametres) and $parametres["sous_categorie_article"] > 0) {
//$join .= " LEFT JOIN commerciale__article_commande as ac on ac.commande_id = c.id";
$join .= " LEFT JOIN article__article as ar2 on ar2.id = ac.article_id";
$join .= " LEFT JOIN article__article_categorie as artcat2 on artcat2.article_id = ar2.id";
$where .= " AND artcat2.categorie_id = '" . $parametres["sous_categorie_article"] . "'";
$join_table_article = true;
$inclure_frais_de_port = false;
if (array_key_exists('sous_sous_categorie_article', $parametres) and $parametres["sous_sous_categorie_article"] > 0) {
//$join .= " LEFT JOIN commerciale__article_commande as ac on ac.commande_id = c.id";
$join .= " LEFT JOIN article__article as ar3 on ar3.id = ac.article_id";
$join .= " LEFT JOIN article__article_categorie as artcat3 on artcat3.article_id = ar2.id";
$where .= " AND artcat3.categorie_id = '" . $parametres["sous_sous_categorie_article"] . "'";
$join_table_article = true;
$inclure_frais_de_port = false;
}
}
}
$where .= " AND c.client_id = " . $parametres["client_id"];
$order_by = "total DESC ";
if (array_key_exists('tri', $parametres) && $parametres["tri"] == "qte") {
$order_by = "total_qte DESC ";
}
$date_n1_f = "";
$date_n1_c = "";
if ($parametres["n1"] == "1") {
$dateDebutN1 = DateTime::createFromFormat('d/m/Y', $parametres['date_debut']);
$dateDebutN1->setTime(00, 00, 00);
$dateDebutN1 = $dateDebutN1->modify('-1 year');
$dateFinN1 = DateTime::createFromFormat('d/m/Y', $parametres['date_fin']);
$dateFinN1->setTime(23, 59, 59);
$dateFinN1 = $dateFinN1->modify('-1 year');
$date_n1_f = " OR (f.date >= '" . $dateDebutN1->format('Y-m-d H:i:s') . "' AND f.date <= '" . $dateFinN1->format('Y-m-d H:i:s') . "')";
$date_n1_c = " OR (c.date >= '" . $dateDebutN1->format('Y-m-d H:i:s') . "' AND c.date <= '" . $dateFinN1->format('Y-m-d H:i:s') . "')";
}
$sql = "
SELECT sum(COALESCE(ac.quantite,0)) as total_qte,ac.libelle,sum(COALESCE(ac.total_ht,0)) as total,a.reference,a.id as article_id,c.date as date_c,f.date as date_f
FROM `commerciale__article_commande` as ac
LEFT JOIN commerciale__commande as c on c.id = ac.commande_id
LEFT JOIN article__article as a on a.id = ac.article_id
LEFT JOIN commerciale__commande as f on c.facture_id = f.id
LEFT JOIN client__client as u on u.id = c.client_id
" . $join . "
WHERE
(
(c.type_document_commercial_id = " . TypeDocumentCommercial::AVOIR . " AND c.statut_commande_id != 19 AND c.multi_bl != 1 AND c.date >= '" . $dateDebut->format('Y-m-d H:i:s') . "' AND c.date <= '" . $dateFin->format(
'Y-m-d H:i:s'
) . "')
OR
(c.type_document_commercial_id = " . TypeDocumentCommercial::FACTURE . " AND c.statut_commande_id != 23 AND c.multi_bl != 1 AND
((c.date >= '" . $dateDebut->format('Y-m-d H:i:s') . "' AND c.date <= '" . $dateFin->format('Y-m-d H:i:s') . "'))
)
OR
(c.type_document_commercial_id = " . TypeDocumentCommercial::BL . " AND c.statut_commande_id != 24 AND c.facture_id > 0 AND f.multi_bl = 1
AND f.statut_commande_id != 23
and
((f.date >= '" . $dateDebut->format('Y-m-d H:i:s') . "' AND f.date <= '" . $dateFin->format('Y-m-d H:i:s') . "'))
)
)
" . $where . "
GROUP BY ac.article_id
ORDER BY " . $order_by . "
";
$sql = trim($sql);
$em = $this->getEntityManager();
$stmt = $em->getConnection()->prepare($sql);
$articles = $stmt->executeQuery()->fetchAllAssociative();
/*
if(array_key_exists('article', $parametres) and $parametres["article"] == 213111 and 1!=1) {
echo "<br></br/>";
print_r($parametres);
echo "<br></br/>";
print_r($articles);
//echo "<br><br>".$sql."<br>\n\n";
exit;
}
*/
if ($inclure_frais_de_port) {
$sql = "
SELECT count(*) as qte ,t.id as transporteur_id,t.reference,t.libelle,sum(COALESCE(c.frais_Port_supplementaire,0)+COALESCE(c.total_frais_port,0)) as total
FROM `commerciale__article_commande` as ac
LEFT JOIN commerciale__commande as c on c.id = ac.commande_id
LEFT JOIN commerciale__commande as f on c.facture_id = f.id
LEFT JOIN client__client as u on u.id = c.client_id
LEFT JOIN transporteur__transporteur as t on t.id = c.transporteur_id
" . $join . "
WHERE
(
(c.type_document_commercial_id = " . TypeDocumentCommercial::FACTURE . " AND c.statut_commande_id != 23 AND c.multi_bl != 1 AND
((c.date >= '" . $dateDebut->format('Y-m-d H:i:s') . "' AND c.date <= '" . $dateFin->format('Y-m-d H:i:s') . "'))
)
OR
(c.type_document_commercial_id = " . TypeDocumentCommercial::BL . " AND c.statut_commande_id != 24 AND c.facture_id > 0 AND f.multi_bl = 1
AND f.statut_commande_id != 23
and
((f.date >= '" . $dateDebut->format('Y-m-d H:i:s') . "' AND f.date <= '" . $dateFin->format('Y-m-d H:i:s') . "'))
)
)
" . $where . "
GROUP BY c.transporteur_id
ORDER BY total DESC
";
$sql = trim($sql);
$em = $this->getEntityManager();
$stmt = $em->getConnection()->prepare($sql);
$transports = $stmt->executeQuery()->fetchAllAssociative();
$tab_transporteur_inclus = [];
if (count($transports) > 0 && $parametres["details_ajax"] == 0) {
for ($r = 0; $r < count($transports); $r++) {
$tab_transport = [];
$tab_transporteur_inclus[] = $transports[$r]["transporteur_id"];
//sum(ac.quantite) as total_qte,ac.libelle,sum(ac.total_ht) as total,a.reference,a.id as article_id
$tab_transport["total_qte"] = $transports[$r]["qte"];
$tab_transport["libelle"] = $transports[$r]["libelle"];
$tab_transport["total"] = $transports[$r]["total"];
$tab_transport["reference"] = $transports[$r]["reference"];
$tab_transport["article_id"] = "";
$tab_transport["transporteur_id"] = $transports[$r]["transporteur_id"];
$articles[] = $tab_transport;
}
}
//echo $sql;
}
if (count($articles) > 0 && $parametres["n1"] == "1") {
$tab_article_inclus = [];
foreach ($articles as $a) {
if ($a["article_id"] != "") {
$tab_article_inclus[] = $a["article_id"];
}
}
$sql = "
SELECT sum(COALESCE(ac.quantite,0)) as total_qte,ac.libelle,sum(COALESCE(ac.total_ht,0)) as total,a.reference,a.id as article_id,c.date as date_c,f.date as date_f
FROM `commerciale__article_commande` as ac
LEFT JOIN commerciale__commande as c on c.id = ac.commande_id
LEFT JOIN article__article as a on a.id = ac.article_id
LEFT JOIN commerciale__commande as f on c.facture_id = f.id
LEFT JOIN client__client as u on u.id = c.client_id
" . $join . "
WHERE
(
(c.type_document_commercial_id = " . TypeDocumentCommercial::FACTURE . " AND c.statut_commande_id != 23 AND c.multi_bl != 1 AND
((c.date >= '" . $dateDebutN1->format('Y-m-d H:i:s') . "' AND c.date <= '" . $dateFinN1->format('Y-m-d H:i:s') . "'))
)
OR
(c.type_document_commercial_id = " . TypeDocumentCommercial::BL . " AND c.statut_commande_id != 24 AND c.facture_id > 0 AND f.multi_bl = 1
AND f.statut_commande_id != 23
and
((f.date >= '" . $dateDebutN1->format('Y-m-d H:i:s') . "' AND f.date <= '" . $dateFinN1->format('Y-m-d H:i:s') . "'))
)
)
" . $where . "
GROUP BY ac.article_id
ORDER BY " . $order_by . "
";
$sql = trim($sql);
$em = $this->getEntityManager();
$stmt = $em->getConnection()->prepare($sql);
$articles_n1 = $stmt->executeQuery()->fetchAllAssociative();
if (count($articles_n1) > 0) {
foreach ($articles_n1 as $an1) {
if (!in_array($an1["article_id"], $tab_article_inclus)) {
$tab_article_n1 = [];
$tab_article_n1["total_qte"] = 0;
$tab_article_n1["libelle"] = $an1["libelle"];
$tab_article_n1["total"] = 0;
$tab_article_n1["reference"] = $an1["reference"];
$tab_article_n1["article_id"] = $an1["article_id"];
$tab_article_n1["transporteur_id"] = "";
$articles[] = $tab_article_n1;
}
}
}
if ($inclure_frais_de_port) {
$sql = "
SELECT count(*) as qte ,t.id as transporteur_id,t.reference,t.libelle,sum(COALESCE(c.frais_Port_supplementaire,0)+COALESCE(c.total_frais_port,0)) as total
FROM `commerciale__article_commande` as ac
LEFT JOIN commerciale__commande as c on c.id = ac.commande_id
LEFT JOIN commerciale__commande as f on c.facture_id = f.id
LEFT JOIN client__client as u on u.id = c.client_id
LEFT JOIN transporteur__transporteur as t on t.id = c.transporteur_id
" . $join . "
WHERE
(
(c.type_document_commercial_id = " . TypeDocumentCommercial::FACTURE . " AND c.statut_commande_id != 23 AND c.multi_bl != 1 AND
((c.date >= '" . $dateDebutN1->format('Y-m-d H:i:s') . "' AND c.date <= '" . $dateFinN1->format('Y-m-d H:i:s') . "'))
)
OR
(c.type_document_commercial_id = " . TypeDocumentCommercial::BL . " AND c.statut_commande_id != 24 AND c.facture_id > 0 AND f.multi_bl = 1
AND f.statut_commande_id != 23
and
((f.date >= '" . $dateDebutN1->format('Y-m-d H:i:s') . "' AND f.date <= '" . $dateFinN1->format('Y-m-d H:i:s') . "'))
)
)
" . $where . "
GROUP BY c.transporteur_id
ORDER BY total DESC
";
$sql = trim($sql);
$em = $this->getEntityManager();
$stmt = $em->getConnection()->prepare($sql);
$transports = $stmt->executeQuery()->fetchAllAssociative();
if (count($transports) > 0 && $parametres["details_ajax"] == 0) {
for ($r = 0; $r < count($transports); $r++) {
if (!in_array($transports[$r]["transporteur_id"], $tab_transporteur_inclus)) {
$tab_transport = [];
$tab_transporteur_inclus[] = $transports[$r]["transporteur_id"];
//sum(ac.quantite) as total_qte,ac.libelle,sum(ac.total_ht) as total,a.reference,a.id as article_id
$tab_transport["total_qte"] = "0";
$tab_transport["libelle"] = $transports[$r]["libelle"];
$tab_transport["total"] = "0";
$tab_transport["reference"] = $transports[$r]["reference"];
$tab_transport["article_id"] = "";
$tab_transport["transporteur_id"] = $transports[$r]["transporteur_id"];
$articles[] = $tab_transport;
}
}
}
}
}
if (array_key_exists('tri', $parametres) && $parametres["tri"] == "qte") {
$qte = [];
foreach ($articles as $key => $row) {
$qte[$key] = floatVal($row['total_qte']);
}
array_multisort($qte, SORT_DESC, $articles);
} elseif (array_key_exists('tri', $parametres) && $parametres["tri"] == "ca") {
$qte = [];
foreach ($articles as $key => $row) {
$qte[$key] = floatVal($row['total']);
}
array_multisort($qte, SORT_DESC, $articles);
}
return $articles;
}
public function derniereEntreeStock($id_article, $param)
{
$repo_raison_mvmt = $this->getEntityManager()->getRepository(RaisonMouvementStock::class);
$raisons_mvmt = $repo_raison_mvmt->findBy([], ['libelle' => 'ASC']);
$where_origine = "";
$in_origine = "";
foreach ($raisons_mvmt as $r) {
if (array_key_exists('origine_' . $r->getId(), $param)) {
$in_origine .= "'" . $r->getId() . "',";
}
}
if ($in_origine != "") {
$in_origine .= ",";
$in_origine = str_replace(",,", "", $in_origine);
$where_origine .= " AND m.raison_mouvement_stock_id IN (" . $in_origine . ")";
}
$sql = 'SELECT m.article_id,m.date_mouvement as dernier
FROM article__mouvement_stock as m
WHERE
m.raison_mouvement_stock_id IN (SELECT id FROM article__raison_mouvement_stock WHERE action = "augmenter")
AND
m.article_id = "' . $id_article . '"
' . $where_origine . '
ORDER BY m.date_mouvement DESC
LIMIT 0,1';
//echo $sql.'<br/><br/>';
$em = $this->getEntityManager();
$stmt = $em->getConnection()->prepare($sql);
$dernier = $stmt->executeQuery()->fetchAllAssociative();
if (count($dernier) > 0) {
return $dernier[0];
}
//return 9;
}
public function derniereSortieStock($id_article, $param)
{
$repo_raison_mvmt = $this->getEntityManager()->getRepository(RaisonMouvementStock::class);
$raisons_mvmt = $repo_raison_mvmt->findBy([], ['libelle' => 'ASC']);
$where_origine = "";
$in_origine = "";
foreach ($raisons_mvmt as $r) {
if (array_key_exists('origine_' . $r->getId(), $param)) {
$in_origine .= "'" . $r->getId() . "',";
}
}
if ($in_origine != "") {
$in_origine .= ",";
$in_origine = str_replace(",,", "", $in_origine);
$where_origine .= " AND m.raison_mouvement_stock_id IN (" . $in_origine . ")";
}
$sql = 'SELECT m.article_id,m.date_mouvement as dernier
FROM article__mouvement_stock as m
WHERE
m.raison_mouvement_stock_id IN (SELECT id FROM article__raison_mouvement_stock WHERE action = "diminuer")
AND
m.article_id = "' . $id_article . '"
' . $where_origine . '
ORDER BY m.date_mouvement DESC
LIMIT 0,1';
//echo $sql.'<br/><br/>';
$em = $this->getEntityManager();
$stmt = $em->getConnection()->prepare($sql);
$dernier = $stmt->executeQuery()->fetchAllAssociative();
if (count($dernier) > 0) {
return $dernier[0];
}
//return 9;
}
public function vivantArticles($parametres = [])
{
if (intval($parametres['nbel']) > 5000) {
$parametres['nbel'] = 5000;
}
$dateDebut = DateTime::createFromFormat('d/m/Y', $parametres['date_debut']);
$dateDebut->setTime(00, 00, 00);
$where = "";
$join = "";
$join_table_client = false;
$join_table_article = false;
$join_table_article = true;
$repo_raison_mvmt = $this->getEntityManager()->getRepository(RaisonMouvementStock::class);
$raisons_mvmt = $repo_raison_mvmt->findBy([], ['libelle' => 'ASC']);
$where = "(a.prestation != 1 or a.prestation IS NULL)";
$where .= " and (a.non_stocke IS NULL OR a.non_stocke = 0) AND (a.divers IS NULL OR a.divers = 0) AND (a.divers_composes IS NULL OR a.divers_composes = 0)";
$where_origine = "";
$in_origine = "";
foreach ($raisons_mvmt as $r) {
if (array_key_exists('origine_' . $r->getId(), $parametres)) {
$in_origine .= "'" . $r->getId() . "',";
}
}
if ($in_origine != "") {
$in_origine .= ",";
$in_origine = str_replace(",,", "", $in_origine);
$where .= " and m.raison_mouvement_stock_id IN (" . $in_origine . ")";
}
if (array_key_exists('marque', $parametres) and $parametres["marque"] > 0) {
if ($where != "") {
$where .= " and";
}
$where .= " a.marque_id = '" . $parametres["marque"] . "'";
$join_table_article = true;
}
if (array_key_exists('article', $parametres) and $parametres["article"] > 0) {
$where .= " and a.id = '" . $parametres["article"] . "'";
$join_table_article = true;
}
if (array_key_exists('ref_article', $parametres) and $parametres["ref_article"] != "") {
$parametres["ref_article"] = str_replace("*", "%", $parametres["ref_article"]);
if ($where != "") {
$where .= " and";
}
$where .= " a.reference like '" . $parametres["ref_article"] . "%'";
$join_table_article = true;
}
if (array_key_exists('art_stock', $parametres) and $parametres["art_stock"] == "1") {
if ($where != "") {
$where .= " and";
}
$where .= " a.stock > 0";
$join_table_article = true;
}
if (array_key_exists('type_article', $parametres) and $parametres["type_article"] != "") {
if ($parametres["type_article"] != "tous") {
if ($where != "") {
$where .= " and";
}
if ($parametres["type_article"] == "non_reappro") {
$where .= " a.arret_gamme = 1";
} elseif ($parametres["type_article"] == "reappro") {
$where .= " a.arret_gamme != 1";
}
}
}
if (array_key_exists('categorie_article', $parametres) and $parametres["categorie_article"] > 0) {
$join .= " LEFT JOIN article__article_categorie as artcat on artcat.article_id = a.id";
if ($where != "") {
$where .= " and";
}
$where .= " artcat.categorie_id = '" . $parametres["categorie_article"] . "'";
$join_table_article = true;
}
//echo "type_article ".$parametres["type_article"]."<br/>";
//echo "WHERE ".$where."<br/>";
//if($where != "") $where .= " and";
$sql = "
SELECT a.reference,a.libelle,a.id as article_id,a.stock,a.pump,a.cpump
FROM `article__article` as a
" . $join . "
WHERE
" . $where . "
a.id NOT IN
(
SELECT article_id
FROM article__mouvement_stock as m
WHERE
m.date_mouvement >= '" . $dateDebut->format('Y-m-d H:i:s') . "'
" . $where_origine . "
GROUP BY article_id
)
GROUP BY article_id
ORDER BY a.reference
";
if (intval($parametres['nbel']) > 0) {
$sql .= " LIMIT 0," . intval($parametres['nbel']);
}// else $sql .= " LIMIT 0,10";
if ($where != "") {
$where = " and " . $where;
}
$sql = "
SELECT a.reference,a.libelle,a.id as article_id,a.stock,a.pump,a.cpump,m.date_mouvement,m.raison_mouvement_stock_id,m.quantite,r.libelle as raison_libelle,CONCAT(CONCAT(u.prenom, ' '), u.nom) as utilisateur_libelle
FROM `article__mouvement_stock` as m
INNER JOIN article__article as a ON a.id = m.article_id
INNER JOIN article__raison_mouvement_stock as r ON r.id = m.raison_mouvement_stock_id
LEFT JOIN utilisateur__utilisateurs as u ON u.id = m.utilisateur_id
" . $join . "
WHERE
m.date_mouvement >= '" . $dateDebut->format('Y-m-d H:i:s') . "'
" . $where . "
ORDER BY m.id DESC
";
if (intval($parametres['nbel']) > 0) {
$sql .= " LIMIT 0," . intval($parametres['nbel']);
}// else $sql .= " LIMIT 0,10";
$sql = trim($sql);
//echo "<br/><br/>".$sql;
//exit;
$em = $this->getEntityManager();
$stmt = $em->getConnection()->prepare($sql);
$articles = $stmt->executeQuery()->fetchAllAssociative();
//print_r($articles);
return $articles;
}
public function mortArticles($parametres = [])
{
if (intval($parametres['nbel']) > 5000) {
$parametres['nbel'] = 5000;
}
$dateDebut = DateTime::createFromFormat('d/m/Y', $parametres['date_debut']);
$dateDebut->setTime(00, 00, 00);
//$dateFin = \DateTime::createFromFormat('d/m/Y',$parametres['date_fin']);
//$dateFin->setTime(23,59,59);
$where = "";
$join = "";
$join_table_client = false;
$join_table_article = false;
$join_table_article = true;
$repo_raison_mvmt = $this->getEntityManager()->getRepository(RaisonMouvementStock::class);
$raisons_mvmt = $repo_raison_mvmt->findBy([], ['libelle' => 'ASC']);
$where = "(a.prestation != 1 or a.prestation IS NULL)";
$where .= " AND (a.non_stocke IS NULL OR a.non_stocke = 0) AND (a.divers IS NULL OR a.divers = 0) AND (a.divers_composes IS NULL OR a.divers_composes = 0)";
$where_origine = "";
$in_origine = "";
foreach ($raisons_mvmt as $r) {
if (array_key_exists('origine_' . $r->getId(), $parametres)) {
$in_origine .= "'" . $r->getId() . "',";
}
}
if ($in_origine != "") {
$in_origine .= ",";
$in_origine = str_replace(",,", "", $in_origine);
$where_origine .= " AND m.raison_mouvement_stock_id IN (" . $in_origine . ")";
}
if (array_key_exists('marque', $parametres) and $parametres["marque"] > 0) {
if ($where != "") {
$where .= " AND";
}
$where .= " a.marque_id = '" . $parametres["marque"] . "'";
$join_table_article = true;
}
if (array_key_exists('article', $parametres) and $parametres["article"] > 0) {
$where .= " AND a.id = '" . $parametres["article"] . "'";
$join_table_article = true;
}
if (array_key_exists('ref_article', $parametres) and $parametres["ref_article"] != "") {
$parametres["ref_article"] = str_replace("*", "%", $parametres["ref_article"]);
if ($where != "") {
$where .= " AND";
}
$where .= " a.reference like '" . $parametres["ref_article"] . "%'";
$join_table_article = true;
}
if (array_key_exists('art_stock', $parametres) and $parametres["art_stock"] == "1") {
if ($where != "") {
$where .= " AND";
}
$where .= " a.stock > 0";
$join_table_article = true;
}
if (array_key_exists('type_article', $parametres) and $parametres["type_article"] != "") {
if ($parametres["type_article"] != "tous") {
if ($where != "") {
$where .= " AND";
}
if ($parametres["type_article"] == "non_reappro") {
$where .= " a.arret_gamme = 1";
} elseif ($parametres["type_article"] == "reappro") {
$where .= " a.arret_gamme != 1";
}
}
}
if (array_key_exists('categorie_article', $parametres) and $parametres["categorie_article"] > 0) {
/*
if(!$join_table_article) {
$join .= " LEFT JOIN commerciale__article_commande as ac on ac.commande_id = c.id";
$join .= " LEFT JOIN article__article as ar on ar.id = ac.article_id";
}
*/
$join .= " LEFT JOIN article__article_categorie as artcat on artcat.article_id = a.id";
if ($where != "") {
$where .= " AND";
}
$where .= " artcat.categorie_id = '" . $parametres["categorie_article"] . "'";
$join_table_article = true;
}
//echo "type_article ".$parametres["type_article"]."<br/>";
//echo "WHERE ".$where."<br/>";
if ($where != "") {
$where .= " AND";
}
$sql = "
SELECT a.reference,a.libelle,a.id as article_id,a.stock,a.pump,a.cpump
FROM `article__article` as a
" . $join . "
WHERE
" . $where . "
a.id NOT IN
(
SELECT article_id
FROM article__mouvement_stock as m
WHERE
m.date_mouvement >= '" . $dateDebut->format('Y-m-d H:i:s') . "'
" . $where_origine . "
GROUP BY article_id
)
GROUP BY article_id
ORDER BY a.reference
";
if (intval($parametres['nbel']) > 0) {
$sql .= " LIMIT 0," . intval($parametres['nbel']);
}// else $sql .= " LIMIT 0,10";
/*
$sql = "
SELECT a.reference,a.libelle,a.id as article_id
FROM `article__article` as a
LEFT JOIN article__mouvement_stock as m on a.id = m.article_id
".$join."
WHERE
m.date_mouvement >= '".$dateDebut->format('Y-m-d H:i:s')."'
".$where."
GROUP BY article_id
LIMIT 0,".intval($parametres['nbel'])."
";
*/
//echo $sql;
/*$sql = "
SELECT SUM(ac.total_ht) as total,ar.reference,ar.libelle,ar.id as article_id
FROM `commerciale__article_commande` as ac
LEFT JOIN commerciale__commande as c on ac.commande_id = c.id
LEFT JOIN commerciale__commande as f on c.facture_id = f.id
LEFT JOIN client__client as u on u.id = c.client_id
LEFT JOIN article__article as ar on ar.id = ac.article_id
".$join."
WHERE
c.date >= '".$dateDebut->format('Y-m-d H:i:s')."'
AND
(
(c.type_document_commercial_id = ".TypeDocumentCommercial::FACTURE." AND c.statut_commande_id != 23 )
OR
(c.type_document_commercial_id = ".TypeDocumentCommercial::BL." AND c.statut_commande_id != 24 AND c.facture_id > 0 AND f.multi_bl = 1
AND f.statut_commande_id != 23
)
)
".$where."
GROUP BY ar.id
ORDER BY total DESC
LIMIT 0,".intval($parametres['nbel'])."
";
*/
$sql = trim($sql);
//echo "<br/><br/>".$sql;
$em = $this->getEntityManager();
$stmt = $em->getConnection()->prepare($sql);
$articles = $stmt->executeQuery()->fetchAllAssociative();
//print_r($articles);
return $articles;
}
public function topArticles($parametres = [])
{
//if(intval($parametres['nbel'])>500) $parametres['nbel'] = 500;
$dateDebut = DateTime::createFromFormat('d/m/Y', $parametres['date_debut']);
$dateDebut->setTime(00, 00, 00);
$dateFin = DateTime::createFromFormat('d/m/Y', $parametres['date_fin']);
$dateFin->setTime(23, 59, 59);
$where = "";
$join = "";
$join_table_client = false;
$join_table_article = false;
$join_table_article = true;
if (array_key_exists('ref_client', $parametres) and $parametres["ref_client"] > 0) {
$join .= " LEFT JOIN client__client as clt on c.client_id = clt.id";
$where .= " AND clt.reference = '" . $parametres["ref_client"] . "'";
$join_table_client = true;
}
if (array_key_exists('client', $parametres) and $parametres["client"] != "") {
//if(!$join_table_client) $join .= " LEFT JOIN client__client as clt on c.client_id = clt.id";
$where .= " AND u.id = '" . $parametres["client"] . "'";
$join_table_client = true;
}
if (array_key_exists('nom_client', $parametres) and $parametres["nom_client"] != "") {
if (!$join_table_client) {
$join .= " LEFT JOIN client__client as clt on c.client_id = clt.id";
}
$where .= " AND clt.nom like '%" . $parametres["nom_client"] . "%'";
$join_table_client = true;
}
if (array_key_exists('equipier', $parametres) and $parametres["equipier"] > 0) {
$where .= " AND c.utilisateur_id = '" . $parametres["equipier"] . "'";
}
if (array_key_exists('marque', $parametres) and $parametres["marque"] > 0) {
//echo "MARQUE";
if (!$join_table_article) {
$join .= " LEFT JOIN commerciale__article_commande as ac on ac.commande_id = c.id";
$join .= " LEFT JOIN article__article as ar on ar.id = ac.article_id";
}
$where .= " AND ar.marque_id = '" . $parametres["marque"] . "'";
$join_table_article = true;
}
if (array_key_exists('ref_article', $parametres) and $parametres["ref_article"] != "") {
if (!$join_table_article) {
$join .= " LEFT JOIN commerciale__article_commande as ac on ac.commande_id = c.id";
$join .= " LEFT JOIN article__article as ar on ar.id = ac.article_id";
}
$parametres["ref_article"] = str_replace("*", "%", $parametres["ref_article"]);
$where .= " AND ar.reference like '" . $parametres["ref_article"] . "%'";
$join_table_article = true;
}
if (array_key_exists('article', $parametres) and $parametres["article"] > 0) {
if (!$join_table_article) {
//$join .= " LEFT JOIN commerciale__article_commande as ac on ac.commande_id = c.id";
$join .= " LEFT JOIN article__article as ar on ar.id = ac.article_id";
}
$where .= " AND ar.id = '" . $parametres["article"] . "'";
$join_table_article = true;
}
/*
if(array_key_exists('article', $parametres) and $parametres["article"] > 0) {
if(!$join_table_article) {
$join .= " LEFT JOIN commerciale__article_commande as ac on ac.commande_id = c.id";
$join .= " LEFT JOIN article__article as ar on ar.id = ac.article_id";
}
$where .= " AND ar.id = '".$parametres["article"]."'";
$join_table_article = true;
}
*/
if (array_key_exists('categorie_client', $parametres) and $parametres["categorie_client"] > 0) {
if (!$join_table_client) {
$join .= " LEFT JOIN client__client as clt on c.client_id = clt.id";
}
//$join .= " LEFT JOIN client__client_categorie as cltcat on cltcat.client_id = u.id";
if (array_key_exists('sous_categorie_client', $parametres) and $parametres["sous_categorie_client"] > 0) {
//$where .= " AND cltcat.categorie_id = '".$parametres["sous_categorie_client"]."'";
$where .= " AND clt.id IN (select distinct(client_id) from client__client_categorie where dateSuppression is null and categorie_id = " . $parametres["sous_categorie_client"] . ")";
} else {
//$where .= " AND cltcat.categorie_id = '".$parametres["categorie_client"]."'";
$where .= " AND clt.id IN (select distinct(client_id) from client__client_categorie where dateSuppression is null and categorie_id = " . $parametres["categorie_client"] . ")";
}
}
if (array_key_exists('categorie_article', $parametres) and $parametres["categorie_article"] > 0) {
if (!$join_table_article) {
$join .= " LEFT JOIN commerciale__article_commande as ac on ac.commande_id = c.id";
$join .= " LEFT JOIN article__article as ar on ar.id = ac.article_id";
}
//$join .= " RIGHT JOIN article__article_categorie as artcat on artcat.article_id = ar.id";
//$where .= " AND artcat.categorie_id = '".$parametres["categorie_article"]."'";
$join_table_article = true;
$where .= " AND ( ar.id IN (select distinct(article_id) from article__article_categorie where categorie_id = " . $parametres["categorie_article"] . ")";
if (array_key_exists('sous_categorie_article', $parametres) and $parametres["sous_categorie_article"] > 0) {
//$join .= " LEFT JOIN commerciale__article_commande as ac on ac.commande_id = c.id";
//$join .= " LEFT JOIN article__article as ar2 on ar2.id = ac.article_id";
//$join .= " LEFT JOIN article__article_categorie as artcat2 on artcat2.article_id = ar2.id";
//$where .= " AND artcat2.categorie_id = '".$parametres["sous_categorie_article"]."'";
$join_table_article = true;
$inclure_frais_de_port = false;
$where .= " AND ar.id IN (select distinct(article_id) from article__article_categorie where categorie_id = " . $parametres["sous_categorie_article"] . ")";
if (array_key_exists('sous_sous_categorie_article', $parametres) and $parametres["sous_sous_categorie_article"] > 0) {
//$join .= " LEFT JOIN commerciale__article_commande as ac on ac.commande_id = c.id";
//$join .= " LEFT JOIN article__article as ar3 on ar3.id = ac.article_id";
//$join .= " LEFT JOIN article__article_categorie as artcat3 on artcat3.article_id = ar2.id";
//$where .= " AND artcat3.categorie_id = '".$parametres["sous_sous_categorie_article"]."'";
$join_table_article = true;
$inclure_frais_de_port = false;
$where .= " AND ar.id IN (select distinct(article_id) from article__article_categorie where categorie_id = " . $parametres["sous_sous_categorie_article"] . ")";
}
}
$where .= ")";
}
/*
SELECT SUM(ac.total_ht) as total,ar.reference,ar.libelle,ar.id as article_id
FROM `commerciale__article_commande` as ac
LEFT JOIN commerciale__commande as c on ac.commande_id = c.id
LEFT JOIN commerciale__commande as f on c.facture_id = f.id
LEFT JOIN client__client as u on u.id = c.client_id
LEFT JOIN article__article as ar on ar.id = ac.article_id
WHERE c.date >= '2016-08-13 00:00:00' AND c.date <= '2017-09-13 23:59:59'
AND
(
(c.type_document_commercial_id = ".TypeDocumentCommercial::FACTURE." AND c.statut_commande_id != 23 )
OR
(c.type_document_commercial_id = ".TypeDocumentCommercial::BL." AND c.statut_commande_id != 24 AND c.facture_id > 0
AND f.statut_commande_id != 23
)
)
GROUP BY ar.id
ORDER BY total DESC LIMIT 0,500
*/
//print_r($parametres);
$order = "total";
if (array_key_exists('tri', $parametres) and $parametres["tri"] == "qte") {
$order = "total_quantite";
}
$sql = "
SELECT SUM(COALESCE(ac.total_ht,0)) as total,SUM(COALESCE(ac.quantite,0)) as total_quantite,ar.reference,ar.libelle,ar.id as article_id
FROM `commerciale__article_commande` as ac
LEFT JOIN commerciale__commande as c on ac.commande_id = c.id
LEFT JOIN commerciale__commande as f on c.facture_id = f.id
LEFT JOIN client__client as u on u.id = c.client_id
LEFT JOIN article__article as ar on ar.id = ac.article_id
" . $join . "
WHERE
c.date >= '" . $dateDebut->format('Y-m-d H:i:s') . "' AND c.date <= '" . $dateFin->format('Y-m-d H:i:s') . "'
AND
(
(c.type_document_commercial_id = " . TypeDocumentCommercial::AVOIR . " AND c.statut_commande_id != 19)
OR
(c.type_document_commercial_id = " . TypeDocumentCommercial::FACTURE . " AND c.statut_commande_id != 23 AND c.multi_bl != 1)
OR
(c.type_document_commercial_id = " . TypeDocumentCommercial::BL . " AND c.statut_commande_id != 24 AND c.facture_id > 0 AND f.multi_bl = 1
AND f.statut_commande_id != 23
)
)
" . $where . "
GROUP BY ar.id
ORDER BY " . $order . " DESC
LIMIT 0," . intval($parametres['nbel']) . "
";
/*$sql = "
SELECT SUM(ac.total_ht) as total,ar.reference,ar.libelle,ar.id as article_id
FROM `commerciale__article_commande` as ac
LEFT JOIN commerciale__commande as c on ac.commande_id = c.id
LEFT JOIN client__client as u on u.id = c.client_id
LEFT JOIN article__article as ar on ar.id = ac.article_id
".$join."
WHERE
c.date >= '".$dateDebut->format('Y-m-d H:i:s')."' AND c.date <= '".$dateFin->format('Y-m-d H:i:s')."'
AND
c.type_document_commercial_id = ".TypeDocumentCommercial::FACTURE."
AND
c.statut_commande_id != 23
".$where."
GROUP BY ar.id
ORDER BY total DESC
LIMIT 0,".intval($parametres['nbel'])."
";
*/
$sql = trim($sql);
//echo "<br/><br/>".$sql;
$em = $this->getEntityManager();
$stmt = $em->getConnection()->prepare($sql);
$articles = $stmt->executeQuery()->fetchAllAssociative();
//print_r($articles);
return $articles;
}
public function topMarquesDetails($parametres = [])
{
if (!array_key_exists('n1', $parametres)) {
$parametres["n1"] = "0";
}
if (!array_key_exists('details_ajax', $parametres)) {
$parametres["details_ajax"] = "0";
}
//print_r($parametres);
//if(intval($parametres['nbel'])>500) $parametres['nbel'] = 500;
$dateDebut = DateTime::createFromFormat('d/m/Y', $parametres['date_debut']);
$dateDebut->setTime(00, 00, 00);
$dateFin = DateTime::createFromFormat('d/m/Y', $parametres['date_fin']);
$dateFin->setTime(23, 59, 59);
$where = "";
$join = "";
$join_table_client = false;
$join_table_article = true;
$inclure_frais_de_port = true;
$inclure_transporteur = true;
if (array_key_exists('ref_client', $parametres) and $parametres["ref_client"] > 0) {
$join .= " LEFT JOIN client__client as clt on c.client_id = clt.id";
$where .= " AND clt.reference like '" . $parametres["ref_client"] . "%'";
$join_table_client = true;
}
if (array_key_exists('nom_client', $parametres) and $parametres["nom_client"] != "") {
//if(!$join_table_client) $join .= " LEFT JOIN client__client as clt on c.client_id = clt.id";
$where .= " AND u.nom like '%" . $parametres["nom_client"] . "%'";
$join_table_client = true;
}
if (array_key_exists('client', $parametres) and $parametres["client"] != "") {
//if(!$join_table_client) $join .= " LEFT JOIN client__client as clt on c.client_id = clt.id";
$where .= " AND u.id = '" . $parametres["client"] . "'";
$join_table_client = true;
}
if (array_key_exists('equipier', $parametres) and $parametres["equipier"] > 0) {
$where .= " AND c.utilisateur_id = '" . $parametres["equipier"] . "'";
}
if (array_key_exists('marque', $parametres) and $parametres["marque"] > 0) {
//echo "MARQUE";
//$join .= " LEFT JOIN commerciale__article_commande as ac on ac.commande_id = c.id";
//$join .= " LEFT JOIN article__article as ar on ar.id = ac.article_id";
$where .= " AND a.marque_id = '" . $parametres["marque"] . "'";
$join_table_article = true;
$inclure_frais_de_port = false;
}
if (array_key_exists('article', $parametres) and $parametres["article"] > 0) {
if (!$join_table_article) {
//$join .= " LEFT JOIN commerciale__article_commande as ac on ac.commande_id = c.id";
$join .= " LEFT JOIN article__article as ar on ar.id = ac.article_id";
}
$where .= " AND a.id = '" . $parametres["article"] . "'";
$join_table_article = true;
$inclure_frais_de_port = false;
}
if (array_key_exists('categorie_client', $parametres) and $parametres["categorie_client"] > 0) {
if (!$join_table_client) {
$join .= " LEFT JOIN client__client as clt on c.client_id = clt.id";
}
$join .= " LEFT JOIN client__client_categorie as cltcat on cltcat.client_id = u.id";
if (array_key_exists('sous_categorie_client', $parametres) and $parametres["sous_categorie_client"] > 0) {
$where .= " AND cltcat.categorie_id = '" . $parametres["sous_categorie_client"] . "'";
} else {
$where .= " AND cltcat.categorie_id = '" . $parametres["categorie_client"] . "'";
}
}
if (array_key_exists('categorie_article', $parametres) and $parametres["categorie_article"] > 0) {
if (!$join_table_article) {
//$join .= " LEFT JOIN commerciale__article_commande as ac on ac.commande_id = c.id";
$join .= " LEFT JOIN article__article as ar on ar.id = ac.article_id";
}
$join .= " LEFT JOIN article__article_categorie as artcat on artcat.article_id = ar.id";
$where .= " AND artcat.categorie_id = '" . $parametres["categorie_article"] . "'";
$join_table_article = true;
$inclure_frais_de_port = false;
if (array_key_exists('sous_categorie_article', $parametres) and $parametres["sous_categorie_article"] > 0) {
//$join .= " LEFT JOIN commerciale__article_commande as ac on ac.commande_id = c.id";
$join .= " LEFT JOIN article__article as ar2 on ar2.id = ac.article_id";
$join .= " LEFT JOIN article__article_categorie as artcat2 on artcat2.article_id = ar2.id";
$where .= " AND artcat2.categorie_id = '" . $parametres["sous_categorie_article"] . "'";
$join_table_article = true;
$inclure_frais_de_port = false;
if (array_key_exists('sous_sous_categorie_article', $parametres) and $parametres["sous_sous_categorie_article"] > 0) {
//$join .= " LEFT JOIN commerciale__article_commande as ac on ac.commande_id = c.id";
$join .= " LEFT JOIN article__article as ar3 on ar3.id = ac.article_id";
$join .= " LEFT JOIN article__article_categorie as artcat3 on artcat3.article_id = ar2.id";
$where .= " AND artcat3.categorie_id = '" . $parametres["sous_sous_categorie_article"] . "'";
$join_table_article = true;
$inclure_frais_de_port = false;
}
}
}
$where .= " AND a.marque_id = " . $parametres["marque_id"];
$order_by = "total DESC ";
if (array_key_exists('tri', $parametres) && $parametres["tri"] == "qte") {
$order_by = "total_qte DESC ";
}
$date_n1_f = "";
$date_n1_c = "";
if ($parametres["n1"] == "1") {
$dateDebutN1 = DateTime::createFromFormat('d/m/Y', $parametres['date_debut']);
$dateDebutN1->setTime(00, 00, 00);
$dateDebutN1 = $dateDebutN1->modify('-1 year');
$dateFinN1 = DateTime::createFromFormat('d/m/Y', $parametres['date_fin']);
$dateFinN1->setTime(23, 59, 59);
$dateFinN1 = $dateFinN1->modify('-1 year');
$date_n1_f = " OR (f.date >= '" . $dateDebutN1->format('Y-m-d H:i:s') . "' AND f.date <= '" . $dateFinN1->format('Y-m-d H:i:s') . "')";
$date_n1_c = " OR (c.date >= '" . $dateDebutN1->format('Y-m-d H:i:s') . "' AND c.date <= '" . $dateFinN1->format('Y-m-d H:i:s') . "')";
}
$sql = "
SELECT sum(COALESCE(ac.quantite,0)) as total_qte,ac.libelle,sum(COALESCE(ac.total_ht,0)) as total,a.reference,a.id as article_id,c.date as date_c,f.date as date_f
FROM `commerciale__article_commande` as ac
LEFT JOIN commerciale__commande as c on c.id = ac.commande_id
LEFT JOIN article__article as a on a.id = ac.article_id
LEFT JOIN commerciale__commande as f on c.facture_id = f.id
LEFT JOIN client__client as u on u.id = c.client_id
LEFT JOIN article__marque as m on m.id = a.marque_id
" . $join . "
WHERE
(
(c.type_document_commercial_id = " . TypeDocumentCommercial::AVOIR . " AND c.statut_commande_id != 19 AND
((c.date >= '" . $dateDebut->format('Y-m-d H:i:s') . "' AND c.date <= '" . $dateFin->format('Y-m-d H:i:s') . "'))
)
OR
(c.type_document_commercial_id = " . TypeDocumentCommercial::FACTURE . " AND c.statut_commande_id != 23 AND c.multi_bl != 1 AND
((c.date >= '" . $dateDebut->format('Y-m-d H:i:s') . "' AND c.date <= '" . $dateFin->format('Y-m-d H:i:s') . "'))
)
OR
(c.type_document_commercial_id = " . TypeDocumentCommercial::BL . " AND c.statut_commande_id != 24 AND c.facture_id > 0 AND f.multi_bl = 1
AND f.statut_commande_id != 23
and
((f.date >= '" . $dateDebut->format('Y-m-d H:i:s') . "' AND f.date <= '" . $dateFin->format('Y-m-d H:i:s') . "'))
)
)
" . $where . "
GROUP BY ac.article_id
ORDER BY " . $order_by . "
";
$sql = trim($sql);
if ($parametres["article"] == "218552" or 1 == 1) {
//echo $sql;
//exit;
}
$em = $this->getEntityManager();
$stmt = $em->getConnection()->prepare($sql);
$articles = $stmt->executeQuery()->fetchAllAssociative();
if (count($articles) > 0 && $parametres["n1"] == "1") {
$tab_article_inclus = [];
foreach ($articles as $a) {
if ($a["article_id"] != "") {
$tab_article_inclus[] = $a["article_id"];
}
}
$sql = "
SELECT sum(COALESCE(ac.quantite,0)) as total_qte,ac.libelle,sum(COALESCE(ac.total_ht,0)) as total,a.reference,a.id as article_id,c.date as date_c,f.date as date_f
FROM `commerciale__article_commande` as ac
LEFT JOIN commerciale__commande as c on c.id = ac.commande_id
LEFT JOIN article__article as a on a.id = ac.article_id
LEFT JOIN commerciale__commande as f on c.facture_id = f.id
LEFT JOIN client__client as u on u.id = c.client_id
LEFT JOIN article__marque as m on m.id = a.marque_id
" . $join . "
WHERE
(
(c.type_document_commercial_id = " . TypeDocumentCommercial::FACTURE . " AND c.statut_commande_id != 23 AND c.multi_bl != 1 AND
((c.date >= '" . $dateDebutN1->format('Y-m-d H:i:s') . "' AND c.date <= '" . $dateFinN1->format('Y-m-d H:i:s') . "'))
)
OR
(c.type_document_commercial_id = " . TypeDocumentCommercial::BL . " AND c.statut_commande_id != 24 AND c.facture_id > 0 AND f.multi_bl = 1
AND f.statut_commande_id != 23
and
((f.date >= '" . $dateDebutN1->format('Y-m-d H:i:s') . "' AND f.date <= '" . $dateFinN1->format('Y-m-d H:i:s') . "'))
)
)
" . $where . "
GROUP BY ac.article_id
ORDER BY " . $order_by . "
";
$sql = trim($sql);
$em = $this->getEntityManager();
$stmt = $em->getConnection()->prepare($sql);
$articles_n1 = $stmt->executeQuery()->fetchAllAssociative();
if (count($articles_n1) > 0) {
foreach ($articles_n1 as $an1) {
if (!in_array($an1["article_id"], $tab_article_inclus)) {
$tab_article_n1 = [];
$tab_article_n1["total_qte"] = 0;
$tab_article_n1["libelle"] = $an1["libelle"];
$tab_article_n1["total"] = 0;
$tab_article_n1["reference"] = $an1["reference"];
$tab_article_n1["article_id"] = $an1["article_id"];
$tab_article_n1["transporteur_id"] = "";
$articles[] = $tab_article_n1;
}
}
}
}
if (array_key_exists('tri', $parametres) && $parametres["tri"] == "qte") {
$qte = [];
foreach ($articles as $key => $row) {
$qte[$key] = floatVal($row['total_qte']);
}
array_multisort($qte, SORT_DESC, $articles);
} elseif (array_key_exists('tri', $parametres) && $parametres["tri"] == "ca") {
$qte = [];
foreach ($articles as $key => $row) {
$qte[$key] = floatVal($row['total']);
}
array_multisort($qte, SORT_DESC, $articles);
}
return $articles;
}
public function topMarques($parametres = [])
{
if (intval($parametres['nbel']) > 500) {
$parametres['nbel'] = 500;
}
$dateDebut = DateTime::createFromFormat('d/m/Y', $parametres['date_debut']);
$dateDebut->setTime(00, 00, 00);
$dateFin = DateTime::createFromFormat('d/m/Y', $parametres['date_fin']);
$dateFin->setTime(23, 59, 59);
$where = "";
$join = "";
$join_table_client = false;
$join_table_article = false;
$join_table_article = true;
if (array_key_exists('ref_client', $parametres) and $parametres["ref_client"] > 0) {
$join .= " LEFT JOIN client__client as clt on c.client_id = clt.id";
$where .= " AND clt.reference = '" . $parametres["ref_client"] . "'";
$join_table_client = true;
}
if (array_key_exists('client', $parametres) and $parametres["client"] != "") {
//if(!$join_table_client) $join .= " LEFT JOIN client__client as clt on c.client_id = clt.id";
$where .= " AND u.id = '" . $parametres["client"] . "'";
$join_table_client = true;
}
if (array_key_exists('nom_client', $parametres) and $parametres["nom_client"] != "") {
if (!$join_table_client) {
$join .= " LEFT JOIN client__client as clt on c.client_id = clt.id";
}
$where .= " AND clt.nom like '%" . $parametres["nom_client"] . "%'";
$join_table_client = true;
}
if (array_key_exists('equipier', $parametres) and $parametres["equipier"] > 0) {
$where .= " AND c.utilisateur_id = '" . $parametres["equipier"] . "'";
}
if (array_key_exists('marque', $parametres) and $parametres["marque"] > 0) {
//echo "MARQUE";
if (!$join_table_article) {
$join .= " LEFT JOIN commerciale__article_commande as ac on ac.commande_id = c.id";
$join .= " LEFT JOIN article__article as ar on ar.id = ac.article_id";
}
$where .= " AND ar.marque_id = '" . $parametres["marque"] . "'";
$join_table_article = true;
}
if (array_key_exists('ref_article', $parametres) and $parametres["ref_article"] != "") {
if (!$join_table_article) {
$join .= " LEFT JOIN commerciale__article_commande as ac on ac.commande_id = c.id";
$join .= " LEFT JOIN article__article as ar on ar.id = ac.article_id";
}
$parametres["ref_article"] = str_replace("*", "%", $parametres["ref_article"]);
$where .= " AND ar.reference like '" . $parametres["ref_article"] . "%'";
$join_table_article = true;
}
if (array_key_exists('article', $parametres) and $parametres["article"] > 0) {
if (!$join_table_article) {
//$join .= " LEFT JOIN commerciale__article_commande as ac on ac.commande_id = c.id";
$join .= " LEFT JOIN article__article as ar on ar.id = ac.article_id";
}
$where .= " AND ar.id = '" . $parametres["article"] . "'";
$join_table_article = true;
}
/*
if(array_key_exists('article', $parametres) and $parametres["article"] > 0) {
if(!$join_table_article) {
$join .= " LEFT JOIN commerciale__article_commande as ac on ac.commande_id = c.id";
$join .= " LEFT JOIN article__article as ar on ar.id = ac.article_id";
}
$where .= " AND ar.id = '".$parametres["article"]."'";
$join_table_article = true;
}
*/
if (array_key_exists('categorie_client', $parametres) and $parametres["categorie_client"] > 0) {
if (!$join_table_client) {
$join .= " LEFT JOIN client__client as clt on c.client_id = clt.id";
}
$join .= " LEFT JOIN client__client_categorie as cltcat on cltcat.client_id = u.id";
if (array_key_exists('sous_categorie_client', $parametres) and $parametres["sous_categorie_client"] > 0) {
$where .= " AND cltcat.categorie_id = '" . $parametres["sous_categorie_client"] . "'";
} else {
$where .= " AND cltcat.categorie_id = '" . $parametres["categorie_client"] . "'";
}
}
if (array_key_exists('categorie_article', $parametres) and $parametres["categorie_article"] > 0) {
if (!$join_table_article) {
$join .= " LEFT JOIN commerciale__article_commande as ac on ac.commande_id = c.id";
$join .= " LEFT JOIN article__article as ar on ar.id = ac.article_id";
}
$join .= " LEFT JOIN article__article_categorie as artcat on artcat.article_id = ar.id";
$where .= " AND artcat.categorie_id = '" . $parametres["categorie_article"] . "'";
$join_table_article = true;
if (array_key_exists('sous_categorie_article', $parametres) and $parametres["sous_categorie_article"] > 0) {
//$join .= " LEFT JOIN commerciale__article_commande as ac on ac.commande_id = c.id";
$join .= " LEFT JOIN article__article as ar2 on ar2.id = ac.article_id";
$join .= " LEFT JOIN article__article_categorie as artcat2 on artcat2.article_id = ar2.id";
$where .= " AND artcat2.categorie_id = '" . $parametres["sous_categorie_article"] . "'";
$join_table_article = true;
$inclure_frais_de_port = false;
if (array_key_exists('sous_sous_categorie_article', $parametres) and $parametres["sous_sous_categorie_article"] > 0) {
//$join .= " LEFT JOIN commerciale__article_commande as ac on ac.commande_id = c.id";
$join .= " LEFT JOIN article__article as ar3 on ar3.id = ac.article_id";
$join .= " LEFT JOIN article__article_categorie as artcat3 on artcat3.article_id = ar2.id";
$where .= " AND artcat3.categorie_id = '" . $parametres["sous_sous_categorie_article"] . "'";
$join_table_article = true;
$inclure_frais_de_port = false;
}
}
}
//print_r($parametres);
$order = "total";
if (array_key_exists('tri', $parametres) and $parametres["tri"] == "qte") {
$order = "total_quantite";
}
$sql = "
SELECT SUM(COALESCE(ac.total_ht,0)) as total,SUM(COALESCE(ac.quantite,0)) as total_quantite,m.reference,m.libelle,m.id as marque_id
FROM `commerciale__article_commande` as ac
LEFT JOIN article__article as ar on ar.id = ac.article_id
LEFT JOIN commerciale__commande as c on ac.commande_id = c.id
LEFT JOIN commerciale__commande as f on c.facture_id = f.id
LEFT JOIN client__client as u on u.id = c.client_id
LEFT JOIN article__marque as m on m.id = ar.marque_id
" . $join . "
WHERE
m.id is not null AND
c.date >= '" . $dateDebut->format('Y-m-d H:i:s') . "' AND c.date <= '" . $dateFin->format('Y-m-d H:i:s') . "'
AND
(
(c.type_document_commercial_id = " . TypeDocumentCommercial::AVOIR . " AND c.statut_commande_id != 19)
OR
(c.type_document_commercial_id = " . TypeDocumentCommercial::FACTURE . " AND c.statut_commande_id != 23 AND c.multi_bl != 1)
OR
(c.type_document_commercial_id = " . TypeDocumentCommercial::BL . " AND c.statut_commande_id != 24 AND c.facture_id > 0 AND f.multi_bl = 1
AND f.statut_commande_id != 23
)
)
" . $where . "
GROUP BY m.id
ORDER BY " . $order . " DESC
LIMIT 0," . intval($parametres['nbel']) . "
";
$sql = trim($sql);
//echo "<br/><br/>".$sql;
$em = $this->getEntityManager();
$stmt = $em->getConnection()->prepare($sql);
$articles = $stmt->executeQuery()->fetchAllAssociative();
//print_r($articles);
return $articles;
}
public function panierMoyen($id_client)
{
$sql = "
SELECT AVG(c.total) as total
FROM `commerciale__commande` as c
WHERE
c.client_id = " . $id_client . "
AND
c.type_document_commercial_id = " . TypeDocumentCommercial::FACTURE . "
AND
c.statut_commande_id != 23
";
$sql = trim($sql);
//echo "<br/><br/>".$sql;
$em = $this->getEntityManager();
$stmt = $em->getConnection()->prepare($sql);
$ca = $stmt->executeQuery()->fetchAllAssociative();
return $ca[0]['total'];
}
public function caClient($parametres = [])
{
$parametres['client'] = intval($parametres['client']);
$sql = "
SELECT SUM(COALESCE(c.total,0)+COALESCE(c.frais_Port_supplementaire,0)+COALESCE(c.total_frais_port,0)) as total
FROM `commerciale__commande` as c
LEFT JOIN commerciale__commande as f on c.facture_id = f.id
LEFT JOIN client__client as u on u.id = c.client_id
WHERE
(
(c.type_document_commercial_id = " . TypeDocumentCommercial::AVOIR . " AND c.statut_commande_id != 19 AND c.multi_bl != 1 AND c.date >= '" . $parametres['dateDebut']->format(
'Y-m-d H:i:s'
) . "' AND c.date <= '" . $parametres['dateFin']->format('Y-m-t H:i:s') . "')
OR
(c.type_document_commercial_id = " . TypeDocumentCommercial::FACTURE . " AND c.statut_commande_id != 23 AND c.multi_bl != 1 AND c.date >= '" . $parametres['dateDebut']->format(
'Y-m-d H:i:s'
) . "' AND c.date <= '" . $parametres['dateFin']->format('Y-m-t H:i:s') . "')
OR
(c.type_document_commercial_id = " . TypeDocumentCommercial::BL . " AND c.statut_commande_id != 24 AND c.facture_id > 0 AND f.multi_bl = 1
AND f.statut_commande_id != 23
and
((f.date >= '" . $parametres['dateDebut']->format('Y-m-d H:i:s') . "' AND f.date <= '" . $parametres['dateFin']->format('Y-m-t H:i:s') . "'))
)
)
AND
c.client_id = " . $parametres['client'] . "
";
//echo "<br/><br/>".$sql;
$sql = trim($sql);
//echo "<br/><br/>".$sql;
$em = $this->getEntityManager();
$stmt = $em->getConnection()->prepare($sql);
$ca = $stmt->executeQuery()->fetchAllAssociative();
$total = $ca[0]['total'];
return $total;
}
public function caAnnee($client)
{
$dateDebut = (new Datetime('first day of January this year'))->setTime(0, 0, 0);;
$dateFin = new Datetime();
$sql = "
SELECT SUM(COALESCE(c.total,0)+COALESCE(c.frais_Port_supplementaire,0)+COALESCE(c.total_frais_port,0)) as total
FROM `commerciale__commande` as c
LEFT JOIN commerciale__commande as f on c.facture_id = f.id
LEFT JOIN client__client as u on u.id = c.client_id
WHERE
(
(c.type_document_commercial_id = " . TypeDocumentCommercial::AVOIR . " AND c.statut_commande_id != 19 AND c.multi_bl != 1 AND c.date >= '" . $dateDebut->format(
'Y-m-d H:i:s'
) . "' AND c.date <= '" . $dateFin->format('Y-m-t H:i:s') . "')
OR
(c.type_document_commercial_id = " . TypeDocumentCommercial::FACTURE . " AND c.statut_commande_id != 23 AND c.multi_bl != 1 AND c.date >= '" . $dateDebut->format(
'Y-m-d H:i:s'
) . "' AND c.date <= '" . $dateFin->format('Y-m-t H:i:s') . "')
OR
(c.type_document_commercial_id = " . TypeDocumentCommercial::BL . " AND c.statut_commande_id != 24 AND c.facture_id > 0 AND f.multi_bl = 1
AND f.statut_commande_id != 23
and
((f.date >= '" . $dateDebut->format('Y-m-d H:i:s') . "' AND f.date <= '" . $dateFin->format('Y-m-t H:i:s') . "'))
)
)
AND
c.client_id = " . $client->getId() . "
";
//echo "<br/><br/>".$sql;
$sql = trim($sql);
//echo "<br/><br/>".$sql;
$em = $this->getEntityManager();
$stmt = $em->getConnection()->prepare($sql);
$ca = $stmt->executeQuery()->fetchAllAssociative();
$total = $ca[0]['total'];
return $total;
}
public function caAnneeN1($client)
{
$dateDebut = (new Datetime('first day of January this year'))->modify('-1 year')->setTime(0, 0, 0);
$dateFin = (new Datetime('last day of December this year'))->modify('-1 year')->setTime(23, 59, 59);
$sql = "
SELECT SUM(COALESCE(c.total,0)+COALESCE(c.frais_Port_supplementaire,0)+COALESCE(c.total_frais_port,0)) as total
FROM `commerciale__commande` as c
LEFT JOIN commerciale__commande as f on c.facture_id = f.id
LEFT JOIN client__client as u on u.id = c.client_id
WHERE
(
(c.type_document_commercial_id = " . TypeDocumentCommercial::AVOIR . " AND c.statut_commande_id != 19 AND c.multi_bl != 1 AND c.date >= '" . $dateDebut->format(
'Y-m-d H:i:s'
) . "' AND c.date <= '" . $dateFin->format('Y-m-t H:i:s') . "')
OR
(c.type_document_commercial_id = " . TypeDocumentCommercial::FACTURE . " AND c.statut_commande_id != 23 AND c.multi_bl != 1 AND c.date >= '" . $dateDebut->format(
'Y-m-d H:i:s'
) . "' AND c.date <= '" . $dateFin->format('Y-m-t H:i:s') . "')
OR
(c.type_document_commercial_id = " . TypeDocumentCommercial::BL . " AND c.statut_commande_id != 24 AND c.facture_id > 0 AND f.multi_bl = 1
AND f.statut_commande_id != 23
and
((f.date >= '" . $dateDebut->format('Y-m-d H:i:s') . "' AND f.date <= '" . $dateFin->format('Y-m-t H:i:s') . "'))
)
)
AND
c.client_id = " . $client->getId() . "
";
//echo "<br/><br/>".$sql;
$sql = trim($sql);
//echo "<br/><br/>".$sql;
$em = $this->getEntityManager();
$stmt = $em->getConnection()->prepare($sql);
$ca = $stmt->executeQuery()->fetchAllAssociative();
$total = $ca[0]['total'];
return $total;
}
public function caMois($parametres = [])
{
$parametres['client'] = intval($parametres['client']);
if (!array_key_exists('n1', $parametres)) {
$parametres['n1'] = 0;
}
$limit = "10000000";
$total = 0;
$totalTtc = 0;
$dateDebut = DateTime::createFromFormat('d/m/Y', '01/' . $parametres['date_debut']);
$dateDebut->setTime(00, 00, 01);
$dateFin = DateTime::createFromFormat('m/Y', $parametres['date_fin']);
$dateFin->setTime(23, 59, 59);
$dateDebutBoucle = DateTime::createFromFormat('d/m/Y', '01/' . $parametres['date_debut']);
$dateDebutBoucle->setTime(00, 00, 00);
$dateFinN1 = DateTime::createFromFormat('m/Y', $parametres['date_fin']);
$dateFinN1->setTime(23, 59, 59);
$dateFinN1 = $dateFinN1->modify('-1 year');
$dateDebutBoucleN1 = DateTime::createFromFormat('d/m/Y', '01/' . $parametres['date_debut']);
$dateDebutBoucleN1->setTime(00, 00, 00);
$dateDebutBoucleN1 = $dateDebutBoucleN1->modify('-1 year');
$totalN1 = 0;
$totalN1Ttc = 0;
$retour = [];
$retour["totalN1"] = [];
while ($dateDebutBoucle < $dateFin)
{
$dateFinBoucle = DateTime::createFromFormat('Y-m-d', $dateDebutBoucle->format('Y-m-d'));
$dateFinBoucle->setTime(23, 59, 59);
$dateFinBoucleN1 = DateTime::createFromFormat('Y-m-d', $dateDebutBoucleN1->format('Y-m-d'));
$dateFinBoucleN1->setTime(23, 59, 59);
$mois[] = $dateDebutBoucle->format("m");
$valeurs = [];
$valeursN1 = [];
if ($dateDebutBoucle->format("m") == "01") {
$valeurs["mois"] = "Janvier";
} elseif ($dateDebutBoucle->format("m") == "02") {
$valeurs["mois"] = "Fevrier";
} elseif ($dateDebutBoucle->format("m") == "03") {
$valeurs["mois"] = "Mars";
} elseif ($dateDebutBoucle->format("m") == "04") {
$valeurs["mois"] = "Avril";
} elseif ($dateDebutBoucle->format("m") == "05") {
$valeurs["mois"] = "Mai";
} elseif ($dateDebutBoucle->format("m") == "06") {
$valeurs["mois"] = "Juin";
} elseif ($dateDebutBoucle->format("m") == "07") {
$valeurs["mois"] = "Juillet";
} elseif ($dateDebutBoucle->format("m") == "08") {
$valeurs["mois"] = "Aout";
} elseif ($dateDebutBoucle->format("m") == "09") {
$valeurs["mois"] = "Septembre";
} elseif ($dateDebutBoucle->format("m") == "10") {
$valeurs["mois"] = "Octobre";
} elseif ($dateDebutBoucle->format("m") == "11") {
$valeurs["mois"] = "Novembre";
} elseif ($dateDebutBoucle->format("m") == "12") {
$valeurs["mois"] = "Décembre";
}
$valeurs["annee"] = $dateDebutBoucle->format("Y");
$valeurs["annee_n1"] = $dateDebutBoucleN1->format("Y");
$sql = "
SELECT SUM(COALESCE(c.total,0)+COALESCE(c.frais_Port_supplementaire,0)+COALESCE(c.total_frais_port,0)) as total,SUM(c.total_ttc) as total_ttc
FROM `commerciale__commande` as c
LEFT JOIN commerciale__commande as f on c.facture_id = f.id
LEFT JOIN client__client as u on u.id = c.client_id
WHERE
(
(c.type_document_commercial_id = " . TypeDocumentCommercial::AVOIR . " AND c.statut_commande_id != 19 AND c.multi_bl != 1 AND c.date >= '" . $dateDebutBoucle->format(
'Y-m-d H:i:s'
) . "' AND c.date <= '" . $dateFinBoucle->format('Y-m-t H:i:s') . "')
OR
(c.type_document_commercial_id = " . TypeDocumentCommercial::FACTURE . " AND c.statut_commande_id != 23 AND c.multi_bl != 1 AND c.date >= '" . $dateDebutBoucle->format(
'Y-m-d H:i:s'
) . "' AND c.date <= '" . $dateFinBoucle->format('Y-m-t H:i:s') . "')
OR
(c.type_document_commercial_id = " . TypeDocumentCommercial::BL . " AND c.statut_commande_id != 24 AND c.facture_id > 0 AND f.multi_bl = 1
AND f.statut_commande_id != 23
and
((f.date >= '" . $dateDebutBoucle->format('Y-m-d H:i:s') . "' AND f.date <= '" . $dateFinBoucle->format('Y-m-t H:i:s') . "'))
)
)
AND
c.client_id = " . $parametres['client'] . "
";
$sql = trim($sql);
$em = $this->getEntityManager();
$stmt = $em->getConnection()->prepare($sql);
$ca = $stmt->executeQuery()->fetchAllAssociative();
$valeurs["total"] = $ca[0]['total'];
$valeurs["total_ttc"] = $ca[0]['total_ttc'];
$dateDebutBoucle->add(new DateInterval('P1M'));
if($ca[0]['total']=="") $ca[0]['total']=0;
if($ca[0]['total_ttc']=="") $ca[0]['total_ttc']=0;
$total = $total + $ca[0]['total'];
$totalTtc = $totalTtc + $ca[0]['total_ttc'];
$retour["ca"][] = $valeurs;
if ($parametres['n1'] == "1") {
$sql = "
SELECT SUM(COALESCE(c.total,0)+COALESCE(c.frais_Port_supplementaire,0)+COALESCE(c.total_frais_port,0)) as total,SUM(c.total_ttc) as total_ttc
FROM `commerciale__commande` as c
WHERE
c.date >= '" . $dateDebutBoucleN1->format('Y-m-d H:i:s') . "' AND c.date <= '" . $dateFinBoucleN1->format('Y-m-t H:i:s') . "'
AND
c.client_id = " . $parametres['client'] . "
AND
c.type_document_commercial_id = " . TypeDocumentCommercial::FACTURE . "
AND
c.statut_commande_id != 23
";
$sql = trim($sql);
$em = $this->getEntityManager();
$stmt = $em->getConnection()->prepare($sql);
$ca = $stmt->executeQuery()->fetchAllAssociative();
$valeursN1["totalN1"] = $ca[0]['total'];
$valeursN1["totalN1_ttc"] = $ca[0]['total_ttc'];
$dateDebutBoucleN1->add(new DateInterval('P1M'));
$totalN1 = $totalN1 + $ca[0]['total'];
$totalN1Ttc = $totalN1Ttc + $ca[0]['total_ttc'];
$retour["caN1"][] = $valeursN1;
}
}
$retour["total"] = $total;
$retour["total_ttc"] = $totalTtc;
$retour["totalN1"] = $totalN1;
$retour["totalN1_ttc"] = $totalN1Ttc;
$retour["panier"] = $this->panierMoyen($parametres['client']);
return $retour;
}
public function totalPortMois($idTransporteur, $date)
{
$sql = "
SELECT SUM(COALESCE(c.total_frais_port_ttc,0)) as total
FROM `commerciale__commande` as c
LEFT JOIN commerciale__commande as f on c.facture_id = f.id
WHERE
c.date >= '" . $date->format('Y-m-d ') . "00:00:00' AND c.date <= '" . $date->format('Y-m-t H:i:s') . "'
AND
(
(c.type_document_commercial_id = " . TypeDocumentCommercial::FACTURE . " AND c.statut_commande_id != 23 AND c.multi_bl != 1)
OR
(c.type_document_commercial_id = " . TypeDocumentCommercial::BL . " AND c.statut_commande_id != 24 AND c.facture_id > 0 AND f.multi_bl = 1
AND f.statut_commande_id != 23
)
)
AND
c.transporteur_id = " . $idTransporteur . "
";
$sql = "
SELECT SUM(COALESCE(c.total_frais_port,0)+COALESCE(c.frais_port_supplementaire,0)) as total
FROM `commerciale__commande` as c
LEFT JOIN commerciale__commande as f on c.facture_id = f.id
WHERE
c.date >= '" . $date->format('Y-m-d ') . "00:00:00' AND c.date <= '" . $date->format('Y-m-t ') . "23:59:59'
AND
(
(c.type_document_commercial_id = " . TypeDocumentCommercial::FACTURE . " AND c.statut_commande_id != 23 AND c.multi_bl != 1)
OR
(c.type_document_commercial_id = " . TypeDocumentCommercial::BL . " AND c.statut_commande_id != 24 AND (c.facture_id > 0) AND f.multi_bl = 1
AND f.statut_commande_id != 23
)
)
AND
c.transporteur_id = " . $idTransporteur . "
";
$sql = trim($sql);
//echo "<br/><br/>".$sql."<br/><br/>";
//exit;
$em = $this->getEntityManager();
$stmt = $em->getConnection()->prepare($sql);
$total = $stmt->executeQuery()->fetchAllAssociative();
return $total[0]['total'];
}
public function nbExpeditionsMois($idTransporteur, $date)
{
/*$sql = "
SELECT sum(ac.quantite) as total
FROM `commerciale__article_commande` as ac
LEFT JOIN commerciale__commande as c on ac.commande_id = c.id
LEFT JOIN commerciale__commande as f on c.facture_id = f.id
WHERE
c.date >= '".$date->format('Y-m-d ')."00:00:00' AND c.date <= '".$date->format('Y-m-t H:i:s')."'
AND
(
(c.type_document_commercial_id = ".TypeDocumentCommercial::FACTURE." AND c.statut_commande_id != 23 )
OR
(c.type_document_commercial_id = ".TypeDocumentCommercial::BL." AND c.statut_commande_id != 24 AND c.facture_id > 0 AND f.multi_bl = 1
AND f.statut_commande_id != 23
)
)
AND
ac.article_id = ".$idArticle."
";
*/
$sql = "
SELECT count(*) as total
FROM `commerciale__commande` as c
LEFT JOIN commerciale__commande as f on c.facture_id = f.id
WHERE
c.date >= '" . $date->format('Y-m-d ') . "00:00:00' AND c.date <= '" . $date->format('Y-m-t ') . "23:59:59'
AND
(
(c.type_document_commercial_id = " . TypeDocumentCommercial::FACTURE . " AND c.statut_commande_id != 23 AND c.multi_bl != 1)
OR
(c.type_document_commercial_id = " . TypeDocumentCommercial::BL . " AND c.statut_commande_id != 24 AND c.facture_id > 0 AND f.multi_bl = 1
AND f.statut_commande_id != 23
)
)
AND
c.transporteur_id = " . $idTransporteur . "
";
$sql = trim($sql);
//echo $sql;
$em = $this->getEntityManager();
$stmt = $em->getConnection()->prepare($sql);
$total = $stmt->executeQuery()->fetchAllAssociative();
return $total[0]['total'];
}
public function suiviConsommationPort($parametres = [])
{
$limit = "10000000";
$articles = [];
$dateDebut = DateTime::createFromFormat('d/m/Y', '01/' . $parametres['date_debut']);
$dateDebut->setTime(00, 00, 00);
$dateFin = DateTime::createFromFormat('m/Y', $parametres['date_fin']);
$dateFin->setTime(23, 59, 59);
$where = "";
$join = "";
$sql = "
SELECT distinct t.id as id_transporteur,t.libelle,t.reference, SUM(COALESCE(c.total_frais_port_ttc,0)) as total
FROM `commerciale__commande` as c
LEFT JOIN commerciale__commande as f on c.facture_id = f.id
LEFT JOIN transporteur__transporteur as t on t.id = c.transporteur_id
" . $join . "
WHERE
c.date >= '" . $dateDebut->format('Y-m-d H:i:s') . "' AND c.date <= '" . $dateFin->format('Y-m-d H:i:s') . "'
AND
(
(c.type_document_commercial_id = " . TypeDocumentCommercial::FACTURE . " AND c.statut_commande_id != 23 AND c.multi_bl != 1 AND c.multi_bl != 1)
OR
(c.type_document_commercial_id = " . TypeDocumentCommercial::BL . " AND c.statut_commande_id != 24 AND c.facture_id > 0 AND f.multi_bl = 1
AND f.statut_commande_id != 23
)
)
AND
t.id is NOT NULL
" . $where . "
GROUP BY t.id
ORDER BY c.total DESC
LIMIT 0," . $limit . "
";
$sql = "
SELECT distinct t.id as id_transporteur,t.libelle,t.reference, SUM(COALESCE(c.total_frais_port,0)+COALESCE(c.frais_port_supplementaire,0)) as total
FROM `commerciale__commande` as c
LEFT JOIN commerciale__commande as f on c.facture_id = f.id
LEFT JOIN transporteur__transporteur as t on t.id = c.transporteur_id
" . $join . "
WHERE
c.date >= '" . $dateDebut->format('Y-m-d H:i:s') . "' AND c.date <= '" . $dateFin->format('Y-m-d H:i:s') . "'
AND
(
(c.type_document_commercial_id = " . TypeDocumentCommercial::FACTURE . " AND c.statut_commande_id != 23 AND c.multi_bl != 1 AND c.multi_bl != 1)
OR
(c.type_document_commercial_id = " . TypeDocumentCommercial::BL . " AND c.statut_commande_id != 24 AND c.facture_id > 0 AND f.multi_bl = 1
AND f.statut_commande_id != 23
)
)
AND
t.id is NOT NULL
" . $where . "
GROUP BY t.id
ORDER BY c.total DESC
LIMIT 0," . $limit . "
";
/*
$sql = "
SELECT distinct ar.id as id_article,ar.libelle,ar.reference,ar.stock
FROM `commerciale__article_commande` as ac
LEFT JOIN commerciale__commande as c on ac.commande_id = c.id
LEFT JOIN commerciale__commande as f on c.facture_id = f.id
LEFT JOIN article__article as ar on ar.id = ac.article_id
".$join."
WHERE
c.date >= '".$dateDebut->format('Y-m-d H:i:s')."' AND c.date <= '".$dateFin->format('Y-m-d H:i:s')."'
AND
(
(c.type_document_commercial_id = ".TypeDocumentCommercial::FACTURE." AND c.statut_commande_id != 23 )
OR
(c.type_document_commercial_id = ".TypeDocumentCommercial::BL." AND c.statut_commande_id != 24 AND c.facture_id > 0 AND f.multi_bl = 1
AND f.statut_commande_id != 23
)
)
".$where."
GROUP BY ar.id
ORDER BY c.total DESC
LIMIT 0,".$limit."
";
*/
//echo $sql;
$sql = trim($sql);
$em = $this->getEntityManager();
$stmt = $em->getConnection()->prepare($sql);
$articles = $stmt->executeQuery()->fetchAllAssociative();
$valeurs = [];
$mois = [];
$qteTotal = "";
$qteTotalStock = "";
$qteTotalExpedition = "";
$qteTotalExpeditionMois = [];
$qteTotalMois = [];
for ($i = 0; $i < count($articles); $i++) {
$quantite = [];
$mois = [];
$total = 0;
$total_expedition = 0;
$dateFinBoucle = DateTime::createFromFormat('m/Y', $parametres['date_fin']);
$dateFinBoucle->setTime(23, 59, 59);
//echo "<div>TEST 001 ".$articles[$i]["total"]."</div>";
$dateDebutBoucle = DateTime::createFromFormat('d/m/Y', '01/' . $parametres['date_debut']);
$dateDebutBoucle->setTime(00, 00, 00);
//$qteTotalStock = $qteTotalStock+$articles[$i]['stock'];
while ($dateDebutBoucle < $dateFinBoucle) {
$mois[] = $dateDebutBoucle->format("m/Y");
$valeurs = [];
$valeurs["mois"] = $dateDebutBoucle->format("m/Y");
$valeurs["quantite"] = $this->totalPortMois($articles[$i]['id_transporteur'], $dateDebutBoucle);
$valeurs["expedition"] = $this->nbExpeditionsMois($articles[$i]['id_transporteur'], $dateDebutBoucle);
$quantite[] = $valeurs;
if (array_key_exists($dateDebutBoucle->format("m/Y"), $qteTotalMois)) {
$qteTotalMois[$dateDebutBoucle->format("m/Y")] += $valeurs["quantite"];
} else {
$qteTotalMois[$dateDebutBoucle->format("m/Y")] = $valeurs["quantite"];
}
if (array_key_exists($dateDebutBoucle->format("m/Y"), $qteTotalExpeditionMois)) {
$qteTotalExpeditionMois[$dateDebutBoucle->format("m/Y")] += $valeurs["expedition"];
} else {
$qteTotalExpeditionMois[$dateDebutBoucle->format("m/Y")] = $valeurs["expedition"];
}
$dateDebutBoucle->add(new DateInterval('P1M'));
$total = $total + $valeurs["quantite"];
$total_expedition = $total_expedition + $valeurs["expedition"];
}
$articles[$i]["valeurs"] = $quantite;
$articles[$i]["total"] = $total;
$articles[$i]["expedition"] = $total_expedition;
$qteTotal = $qteTotal + $total;
$qteTotalExpedition = $qteTotalExpedition + $total_expedition;
}
//print_r($articles);
$retour = [];
$retour['transporteurs'] = $articles;
$retour['mois'] = $mois;
$retour['total'] = [
"valeur" => $qteTotal,
"expeditionMois" => $qteTotalExpeditionMois,
"totalMois" => $qteTotalMois,
"stock" => $qteTotalStock,
"expedition" => $qteTotalExpedition,
];
//print_r($qteTotalMois);
return $retour;
}
public function suiviConsommation($parametres = [])
{
$limit = "10000000";
$articles = [];
$dateDebut = DateTime::createFromFormat('d/m/Y', '01/' . $parametres['date_debut']);
$dateDebut->setTime(00, 00, 00);
$dateFin = DateTime::createFromFormat('m/Y', $parametres['date_fin']);
$dateFin->setTime(23, 59, 59);
$where = "";
$where_mouvemente = "";
$join = "";
//print_r($parametres);
if (array_key_exists('non_mouv', $parametres) and $parametres["non_mouv"] == 1) {
$where_mouvemente = "OR ((ar.stock > 0) ";
}
if (array_key_exists('marque', $parametres) and $parametres["marque"] > 0) {
$where .= " AND ar.marque_id = '" . $parametres["marque"] . "'";
$join_table_article = true;
if (array_key_exists('non_mouv', $parametres) and $parametres["non_mouv"] == 1) {
$where_mouvemente .= " AND ar.marque_id = '" . $parametres["marque"] . "'";
}
}
if (array_key_exists('article', $parametres) and $parametres["article"] > 0) {
$where .= " AND ar.id = '" . $parametres["article"] . "'";
$join_table_article = true;
if (array_key_exists('non_mouv', $parametres) and $parametres["non_mouv"] == 1) {
$where_mouvemente .= " AND ar.id = '" . $parametres["article"] . "'";
}
}
if (array_key_exists('categorie_article_3', $parametres) and $parametres["categorie_article_3"] > 0) {
//echo "<div>AA</div>";
$join .= " LEFT JOIN article__article_categorie as artcat on artcat.article_id = ar.id";
$where .= " AND artcat.categorie_id = '" . $parametres["categorie_article_3"] . "'";
$join_table_article = true;
if (array_key_exists('non_mouv', $parametres) and $parametres["non_mouv"] == 1) {
$where_mouvemente .= " AND artcat.categorie_id = '" . $parametres["categorie_article_3"] . "'";
}
} elseif (array_key_exists('categorie_article_2', $parametres) and $parametres["categorie_article_2"] > 0) {
//echo "<div>BB</div>";
$join .= " LEFT JOIN article__article_categorie as artcat on artcat.article_id = ar.id";
$where .= " AND artcat.categorie_id = '" . $parametres["categorie_article_2"] . "'";
$join_table_article = true;
if (array_key_exists('non_mouv', $parametres) and $parametres["non_mouv"] == 1) {
$where_mouvemente .= " AND artcat.categorie_id = '" . $parametres["categorie_article_2"] . "'";
}
} elseif (array_key_exists('categorie_article', $parametres) and $parametres["categorie_article"] > 0) {
//echo "<div>CC</div>";
$join .= " LEFT JOIN article__article_categorie as artcat on artcat.article_id = ar.id";
$where .= " AND artcat.categorie_id = '" . $parametres["categorie_article"] . "'";
$join_table_article = true;
if (array_key_exists('non_mouv', $parametres) and $parametres["non_mouv"] == 1) {
$where_mouvemente .= " AND artcat.categorie_id = '" . $parametres["categorie_article"] . "'";
}
}
if (array_key_exists('non_mouv', $parametres) and $parametres["non_mouv"] == 1) {
$where_mouvemente .= ")";
}
//echo "<div><b>".$where_mouvemente."</b></div><br/><br/>";
if (array_key_exists('consommation', $parametres) and $parametres["consommation"] == "achat") {
/*
$sql = "
SELECT distinct ar.id as id_article,ar.libelle,ar.reference,ar.stock
FROM `commerciale__article_commande` as ac
LEFT JOIN commerciale__commande_fournisseur as c on ac.commande_fournisseur_id = c.id
LEFT JOIN article__article as ar on ar.id = ac.article_id
".$join."
WHERE
c.date >= '".$dateDebut->format('Y-m-d H:i:s')."' AND c.date <= '".$dateFin->format('Y-m-d H:i:s')."'
AND
c.statut_commande_id = 6
".$where."
GROUP BY ar.id
ORDER BY total DESC
LIMIT 0,".$limit."
";
*/
$sql = "
SELECT
ar.id as id_article,
ar.libelle,
ar.reference,
ar.stock
FROM `article__mouvement_stock` as ac
LEFT JOIN commerciale__commande_fournisseur as c on ac.commande_id = c.id
LEFT JOIN article__article as ar on ar.id = ac.article_id
" . $join . "
WHERE
ac.date_mouvement >= '" . $dateDebut->format('Y-m-d H:i:s') . "' AND ac.date_mouvement <= '" . $dateFin->format('Y-m-d H:i:s') . "'
AND
ac.raison_mouvement_stock_id IN ('3','32')
" . $where . "
" . $where_mouvemente . "
GROUP BY ar.id
ORDER BY reference ASC
LIMIT 0," . $limit . "
";
} elseif (array_key_exists('consommation', $parametres) and $parametres["consommation"] == "fabrication_plus") {
/*
$sql = "
SELECT distinct ar.id as id_article,ar.libelle,ar.reference,ar.stock
FROM `commerciale__article_commande` as ac
LEFT JOIN commerciale__fabrication as c on ac.fabrication_id = c.id
LEFT JOIN article__article as ar on ar.id = ac.article_id
".$join."
WHERE
c.date >= '".$dateDebut->format('Y-m-d H:i:s')."' AND c.date <= '".$dateFin->format('Y-m-d H:i:s')."'
AND
c.statut_fabrication_id IN (4)
".$where."
GROUP BY ar.id
LIMIT 0,".$limit."
";
*/
$sql = "
SELECT
ar.id as id_article,
ar.libelle,
ar.reference,
ar.stock
FROM `article__mouvement_stock` as ac
LEFT JOIN commerciale__commande as c on ac.commande_id = c.id
LEFT JOIN commerciale__commande as f on c.facture_id = f.id
LEFT JOIN article__article as ar on ar.id = ac.article_id
" . $join . "
WHERE
ac.date_mouvement >= '" . $dateDebut->format('Y-m-d H:i:s') . "' AND ac.date_mouvement <= '" . $dateFin->format('Y-m-d H:i:s') . "'
AND
(ac.raison_mouvement_stock_id = '9')
" . $where . "
" . $where_mouvemente . "
GROUP BY ar.id
ORDER BY reference ASC
LIMIT 0," . $limit . "
";
} elseif (array_key_exists('consommation', $parametres) and $parametres["consommation"] == "fabrication_moins") {
/*
$sql = "
SELECT distinct ar.id as id_article,ar.libelle,ar.reference,ar.stock
FROM `commerciale__article_commande` as ac
LEFT JOIN commerciale__fabrication as c on ac.fabrication_id = c.id
LEFT JOIN article__article as ar on ar.id = ac.article_id
".$join."
WHERE
c.date >= '".$dateDebut->format('Y-m-d H:i:s')."' AND c.date <= '".$dateFin->format('Y-m-d H:i:s')."'
AND
c.statut_fabrication_id IN (4)
".$where."
GROUP BY ar.id
LIMIT 0,".$limit."
";
*/
$sql = "
SELECT
ar.id as id_article,
ar.libelle,
ar.reference,
ar.stock
FROM `article__mouvement_stock` as ac
LEFT JOIN commerciale__commande as c on ac.commande_id = c.id
LEFT JOIN commerciale__commande as f on c.facture_id = f.id
LEFT JOIN article__article as ar on ar.id = ac.article_id
" . $join . "
WHERE
ac.date_mouvement >= '" . $dateDebut->format('Y-m-d H:i:s') . "' AND ac.date_mouvement <= '" . $dateFin->format('Y-m-d H:i:s') . "'
AND
(ac.raison_mouvement_stock_id = '6')
" . $where . "
" . $where_mouvemente . "
GROUP BY ar.id
ORDER BY reference ASC
LIMIT 0," . $limit . "
";
} else {
/*
$sql = "
SELECT distinct ar.id as id_article,ar.libelle,ar.reference,ar.stock
FROM `commerciale__article_commande` as ac
LEFT JOIN commerciale__commande as c on ac.commande_id = c.id
LEFT JOIN commerciale__commande as f on c.facture_id = f.id
LEFT JOIN article__article as ar on ar.id = ac.article_id
".$join."
WHERE
c.date >= '".$dateDebut->format('Y-m-d H:i:s')."' AND c.date <= '".$dateFin->format('Y-m-d H:i:s')."'
AND
(
((c.type_document_commercial_id = ".TypeDocumentCommercial::FACTURE." AND c.statut_commande_id != 23) OR (c.type_document_commercial_id = ".TypeDocumentCommercial::AVOIR." AND c.statut_commande_id != 20 AND c.statut_commande_id != 19) )
OR
(c.type_document_commercial_id = ".TypeDocumentCommercial::BL." AND c.statut_commande_id != 24 AND c.facture_id > 0 AND f.multi_bl = 1
AND f.statut_commande_id != 23
)
)
".$where."
GROUP BY ar.id
ORDER BY c.total DESC
LIMIT 0,".$limit."
";
*/
$sql = "
SELECT
ar.id as id_article,
ar.libelle,
ar.reference,
ar.stock
FROM `article__mouvement_stock` as ac
LEFT JOIN commerciale__commande as c on ac.commande_id = c.id
LEFT JOIN commerciale__commande as f on c.facture_id = f.id
LEFT JOIN article__article as ar on ar.id = ac.article_id
" . $join . "
WHERE
ac.date_mouvement >= '" . $dateDebut->format('Y-m-d H:i:s') . "' AND ac.date_mouvement <= '" . $dateFin->format('Y-m-d H:i:s') . "'
AND
(
(
(c.type_document_commercial_id = " . TypeDocumentCommercial::BL . " AND c.statut_commande_id != 25)
OR
(c.type_document_commercial_id = " . TypeDocumentCommercial::FACTURE . " AND c.statut_commande_id != 23)
OR
(c.type_document_commercial_id = " . TypeDocumentCommercial::AVOIR . " AND c.statut_commande_id != 20)
)
)
" . $where . "
" . $where_mouvemente . "
GROUP BY ar.id
ORDER BY reference ASC
LIMIT 0," . $limit . "
";
//echo $sql;
}
//echo "<div>".$sql."</div>";
$sql = trim($sql);
$em = $this->getEntityManager();
$stmt = $em->getConnection()->prepare($sql);
$articles = $stmt->executeQuery()->fetchAllAssociative();
$valeurs = [];
$mois = [];
$qteTotal = "";
$qteTotalStock = "";
$qteTotalMois = [];
for ($i = 0; $i < count($articles); $i++) {
$quantite = [];
$mois = [];
$total = 0;
$dateFinBoucle = DateTime::createFromFormat('m/Y', $parametres['date_fin']);
$dateFinBoucle->setTime(23, 59, 59);
//echo "TEST 001";
$dateDebutBoucle = DateTime::createFromFormat('d/m/Y', '01/' . $parametres['date_debut']);
$dateDebutBoucle->setTime(23, 59, 59);
$qteTotalStock = $qteTotalStock + $articles[$i]['stock'];
while ($dateDebutBoucle < $dateFinBoucle) {
$mois[] = $dateDebutBoucle->format("m/Y");
$valeurs = [];
$valeurs["mois"] = $dateDebutBoucle->format("m/Y");
if (array_key_exists('consommation', $parametres) and $parametres["consommation"] == "achat") {
$valeurs["quantite"] = $this->totalAchatMois($articles[$i]['id_article'], $dateDebutBoucle);
} elseif (array_key_exists('consommation', $parametres) and $parametres["consommation"] == "fabrication_plus") {
$valeurs["quantite"] = $this->totalUtiliseFabricationMois($articles[$i]['id_article'], $dateDebutBoucle, "plus");
} elseif (array_key_exists('consommation', $parametres) and $parametres["consommation"] == "fabrication_moins") {
$valeurs["quantite"] = $this->totalUtiliseFabricationMois($articles[$i]['id_article'], $dateDebutBoucle, "moins");
} else {
$valeurs["quantite"] = $this->totalVenduMois($articles[$i]['id_article'], $dateDebutBoucle);
}
$quantite[] = $valeurs;
if (array_key_exists($dateDebutBoucle->format("m/Y"), $qteTotalMois)) {
$qteTotalMois[$dateDebutBoucle->format("m/Y")] += $valeurs["quantite"];
} else {
$qteTotalMois[$dateDebutBoucle->format("m/Y")] = $valeurs["quantite"];
}
$dateDebutBoucle->add(new DateInterval('P1M'));
$total = $total + $valeurs["quantite"];
}
$articles[$i]["valeurs"] = $quantite;
$articles[$i]["total"] = $total;
$qteTotal = $qteTotal + $total;
}
//print_r($articles);
$retour = [];
$retour['articles'] = $articles;
$retour['mois'] = $mois;
$retour['total'] = ["valeur" => $qteTotal, "totalMois" => $qteTotalMois, "stock" => $qteTotalStock];
//print_r($qteTotalMois);
return $retour;
}
public function ____suiviConsommation($parametres = [])
{
$limit = "10000000";
$articles = [];
$dateDebut = DateTime::createFromFormat('d/m/Y', '01/' . $parametres['date_debut']);
$dateDebut->setTime(00, 00, 00);
$dateFin = DateTime::createFromFormat('m/Y', $parametres['date_fin']);
$dateFin->setTime(23, 59, 59);
$where = "";
$join = "";
//print_r($parametres);
if (array_key_exists('marque', $parametres) and $parametres["marque"] > 0) {
$where .= " AND ar.marque_id = '" . $parametres["marque"] . "'";
$join_table_article = true;
}
if (array_key_exists('article', $parametres) and $parametres["article"] > 0) {
$where .= " AND ar.id = '" . $parametres["article"] . "'";
$join_table_article = true;
}
if (array_key_exists('categorie_article_3', $parametres) and $parametres["categorie_article_3"] > 0) {
//echo "<div>AA</div>";
$join .= " LEFT JOIN article__article_categorie as artcat on artcat.article_id = ar.id";
$where .= " AND artcat.categorie_id = '" . $parametres["categorie_article_3"] . "'";
$join_table_article = true;
} elseif (array_key_exists('categorie_article_2', $parametres) and $parametres["categorie_article_2"] > 0) {
//echo "<div>BB</div>";
$join .= " LEFT JOIN article__article_categorie as artcat on artcat.article_id = ar.id";
$where .= " AND artcat.categorie_id = '" . $parametres["categorie_article_2"] . "'";
$join_table_article = true;
} elseif (array_key_exists('categorie_article', $parametres) and $parametres["categorie_article"] > 0) {
//echo "<div>CC</div>";
$join .= " LEFT JOIN article__article_categorie as artcat on artcat.article_id = ar.id";
$where .= " AND artcat.categorie_id = '" . $parametres["categorie_article"] . "'";
$join_table_article = true;
}
if (array_key_exists('consommation', $parametres) and $parametres["consommation"] == "achat") {
$sql = "
SELECT distinct ar.id as id_article,ar.libelle,ar.reference,ar.stock
FROM `commerciale__article_commande` as ac
LEFT JOIN commerciale__commande_fournisseur as c on ac.commande_fournisseur_id = c.id
LEFT JOIN article__article as ar on ar.id = ac.article_id
" . $join . "
WHERE
c.date >= '" . $dateDebut->format('Y-m-d H:i:s') . "' AND c.date <= '" . $dateFin->format('Y-m-d H:i:s') . "'
AND
c.statut_commande_id = 6
" . $where . "
GROUP BY ar.id
ORDER BY total DESC
LIMIT 0," . $limit . "
";
} elseif (array_key_exists('consommation', $parametres) and $parametres["consommation"] == "fabrication") {
$sql = "
SELECT distinct ar.id as id_article,ar.libelle,ar.reference,ar.stock
FROM `commerciale__article_commande` as ac
LEFT JOIN commerciale__fabrication as c on ac.fabrication_id = c.id
LEFT JOIN article__article as ar on ar.id = ac.article_id
" . $join . "
WHERE
c.date >= '" . $dateDebut->format('Y-m-d H:i:s') . "' AND c.date <= '" . $dateFin->format('Y-m-d H:i:s') . "'
AND
c.statut_fabrication_id IN (4)
" . $where . "
GROUP BY ar.id
LIMIT 0," . $limit . "
";
} else {
/*
SELECT distinct ar.id as id_article,ar.libelle,ar.reference,ar.stock
FROM `commerciale__article_commande` as ac
LEFT JOIN commerciale__commande as c on ac.commande_id = c.id
LEFT JOIN commerciale__commande as f on c.facture_id = f.id
LEFT JOIN article__article as ar on ar.id = ac.article_id
WHERE c.date >= '2015-09-01 23:59:59' AND c.date <= '2016-09-13 23:59:59'
AND
(
(c.type_document_commercial_id = ".TypeDocumentCommercial::FACTURE." AND c.statut_commande_id != 23 )
OR
(c.type_document_commercial_id = ".TypeDocumentCommercial::BL." AND c.statut_commande_id != 24 AND c.facture_id > 0
AND f.statut_commande_id != 23
)
)
GROUP BY ar.id ORDER BY c.total DESC LIMIT 0,10000000
*/
$sql = "
SELECT distinct ar.id as id_article,ar.libelle,ar.reference,ar.stock
FROM `commerciale__article_commande` as ac
LEFT JOIN commerciale__commande as c on ac.commande_id = c.id
LEFT JOIN commerciale__commande as f on c.facture_id = f.id
LEFT JOIN article__article as ar on ar.id = ac.article_id
" . $join . "
WHERE
c.date >= '" . $dateDebut->format('Y-m-d H:i:s') . "' AND c.date <= '" . $dateFin->format('Y-m-d H:i:s') . "'
AND
(
((c.type_document_commercial_id = " . TypeDocumentCommercial::FACTURE . " AND c.statut_commande_id != 23) OR (c.type_document_commercial_id = " . TypeDocumentCommercial::AVOIR . " AND c.statut_commande_id != 20 AND c.statut_commande_id != 19) )
OR
(c.type_document_commercial_id = " . TypeDocumentCommercial::BL . " AND c.statut_commande_id != 24 AND c.facture_id > 0 AND f.multi_bl = 1
AND f.statut_commande_id != 23
)
)
" . $where . "
GROUP BY ar.id
ORDER BY c.total DESC
LIMIT 0," . $limit . "
";
/*$sql = "
SELECT distinct ar.id as id_article,ar.libelle,ar.reference,ar.stock
FROM `commerciale__article_commande` as ac
LEFT JOIN commerciale__commande as c on ac.commande_id = c.id
LEFT JOIN article__article as ar on ar.id = ac.article_id
".$join."
WHERE
c.date >= '".$dateDebut->format('Y-m-d H:i:s')."' AND c.date <= '".$dateFin->format('Y-m-d H:i:s')."'
AND
c.type_document_commercial_id = ".TypeDocumentCommercial::FACTURE."
AND
c.statut_commande_id != 23
".$where."
GROUP BY ar.id
ORDER BY total DESC
LIMIT 0,".$limit."
";
*/
}
//echo $sql;
$sql = trim($sql);
$em = $this->getEntityManager();
$stmt = $em->getConnection()->prepare($sql);
$articles = $stmt->executeQuery()->fetchAllAssociative();
$valeurs = [];
$mois = [];
$qteTotal = "";
$qteTotalStock = "";
$qteTotalMois = [];
for ($i = 0; $i < count($articles); $i++) {
$quantite = [];
$mois = [];
$total = 0;
$dateFinBoucle = DateTime::createFromFormat('m/Y', $parametres['date_fin']);
$dateFinBoucle->setTime(23, 59, 59);
//echo "TEST 001";
$dateDebutBoucle = DateTime::createFromFormat('d/m/Y', '01/' . $parametres['date_debut']);
$dateDebutBoucle->setTime(23, 59, 59);
$qteTotalStock = $qteTotalStock + $articles[$i]['stock'];
while ($dateDebutBoucle < $dateFinBoucle) {
$mois[] = $dateDebutBoucle->format("m/Y");
$valeurs = [];
$valeurs["mois"] = $dateDebutBoucle->format("m/Y");
if (array_key_exists('consommation', $parametres) and $parametres["consommation"] == "achat") {
$valeurs["quantite"] = $this->totalAchatMois($articles[$i]['id_article'], $dateDebutBoucle);
} else {
$valeurs["quantite"] = $this->totalVenduMois($articles[$i]['id_article'], $dateDebutBoucle);
}
$quantite[] = $valeurs;
if (array_key_exists($dateDebutBoucle->format("m/Y"), $qteTotalMois)) {
$qteTotalMois[$dateDebutBoucle->format("m/Y")] += $valeurs["quantite"];
} else {
$qteTotalMois[$dateDebutBoucle->format("m/Y")] = $valeurs["quantite"];
}
$dateDebutBoucle->add(new DateInterval('P1M'));
$total = $total + $valeurs["quantite"];
}
$articles[$i]["valeurs"] = $quantite;
$articles[$i]["total"] = $total;
$qteTotal = $qteTotal + $total;
}
//print_r($articles);
$retour = [];
$retour['articles'] = $articles;
$retour['mois'] = $mois;
$retour['total'] = ["valeur" => $qteTotal, "totalMois" => $qteTotalMois, "stock" => $qteTotalStock];
//print_r($qteTotalMois);
return $retour;
}
public function totalAchatMois($idArticle, $date)
{
$sql = "
SELECT sum(COALESCE(ac.quantite,0)) as total
FROM `commerciale__article_commande` as ac
LEFT JOIN commerciale__commande_fournisseur as c on ac.commande_fournisseur_id = c.id
WHERE
c.date >= '" . $date->format('Y-m-d ') . "00:00:00' AND c.date <= '" . $date->format('Y-m-t H:i:s') . "'
AND
c.statut_commande_id = 6
AND
ac.article_id = " . $idArticle . "
";
$sql = "
SELECT sum(COALESCE(ac.quantite,0)) as total
FROM `article__mouvement_stock` as ac
LEFT JOIN commerciale__commande_fournisseur as c on ac.commande_id = c.id
LEFT JOIN article__article as ar on ar.id = ac.article_id
WHERE
ac.date_mouvement >= '" . $date->format('Y-m-d H:i:s') . "' AND ac.date_mouvement <= '" . $date->format('Y-m-t ') . "23:59:59'
AND
ac.raison_mouvement_stock_id IN ('3','32')
AND
ac.article_id = " . $idArticle . "
";
$sql = trim($sql);
//echo "<br/><br/>".$sql;
$em = $this->getEntityManager();
$stmt = $em->getConnection()->prepare($sql);
$total = $stmt->executeQuery()->fetchAllAssociative();
return $total[0]['total'];
}
public function totalUtiliseFabricationMois($idArticle, $date, $type = "plus")
{
$total_global = "0";
$total_fabrique = "0";
$total_defabrique = "0";
if ($type == "plus") {
$sql = "
SELECT sum(COALESCE(ac.quantite,0)) as total
FROM `article__mouvement_stock` as ac
LEFT JOIN commerciale__commande as c on ac.commande_id = c.id
LEFT JOIN commerciale__commande as f on c.facture_id = f.id
LEFT JOIN article__article as ar on ar.id = ac.article_id
WHERE
ac.date >= '" . $date->format('Y-m-d ') . "00:00:00' AND ac.date <= '" . $date->format('Y-m-t H:i:s') . "'
AND
(ac.raison_mouvement_stock_id = '9')
AND
ac.article_id = " . $idArticle . "
";
//echo "<br/><br/>".$sql;
$sql = trim($sql);
$em = $this->getEntityManager();
$stmt = $em->getConnection()->prepare($sql);
$total = $stmt->executeQuery()->fetchAllAssociative();
$total_fabrique = $total[0]['total'];
} elseif ($type == "moins") {
$sql = "
SELECT sum(COALESCE(ac.quantite,0)) as total
FROM `article__mouvement_stock` as ac
LEFT JOIN commerciale__commande as c on ac.commande_id = c.id
LEFT JOIN commerciale__commande as f on c.facture_id = f.id
LEFT JOIN article__article as ar on ar.id = ac.article_id
WHERE
ac.date >= '" . $date->format('Y-m-d ') . "00:00:00' AND ac.date <= '" . $date->format('Y-m-t H:i:s') . "'
AND
(ac.raison_mouvement_stock_id = '6')
AND
ac.article_id = " . $idArticle . "
";
//echo "<br/><br/>".$sql;
$sql = trim($sql);
$em = $this->getEntityManager();
$stmt = $em->getConnection()->prepare($sql);
$total = $stmt->executeQuery()->fetchAllAssociative();
$total_defabrique = $total[0]['total'];
}
//echo "<div>FAB ".$total_fabrique."</div>";
//echo "<div>DEFAB ".$total_defabrique."</div>";
$total_global = $total_fabrique - $total_defabrique;
return $total_global;
}
public function totalVenduMois($idArticle, $date)
{
$sql = "
SELECT sum(COALESCE(ac.quantite,0)) as total
FROM `commerciale__article_commande` as ac
LEFT JOIN commerciale__commande as c on ac.commande_id = c.id
LEFT JOIN commerciale__commande as f on c.facture_id = f.id
WHERE
c.date >= '" . $date->format('Y-m-d ') . "00:00:00' AND c.date <= '" . $date->format('Y-m-t H:i:s') . "'
AND
(
(c.type_document_commercial_id = " . TypeDocumentCommercial::FACTURE . " AND c.statut_commande_id != 23 )
OR
(c.type_document_commercial_id = " . TypeDocumentCommercial::BL . " AND c.statut_commande_id != 24 AND c.facture_id > 0 AND f.multi_bl = 1
AND f.statut_commande_id != 23
)
)
AND
ac.article_id = " . $idArticle . "
";
//539354
$sql = "
SELECT sum(COALESCE(ac.quantite,0)) as total
FROM `article__mouvement_stock` as ac
LEFT JOIN commerciale__commande as c on ac.commande_id = c.id
LEFT JOIN commerciale__commande as f on c.facture_id = f.id
LEFT JOIN article__article as ar on ar.id = ac.article_id
LEFT JOIN commerciale__commande as cv on ac.commande_virtuel_id = cv.id
WHERE
ac.date_mouvement >= '" . $date->format('Y-m-d ') . "00:00:00' AND ac.date_mouvement <= '" . $date->format('Y-m-t ') . "23:59:59'
AND
(
(
((c.type_document_commercial_id = " . TypeDocumentCommercial::BL . " AND c.statut_commande_id != 25) or (cv.type_document_commercial_id = " . TypeDocumentCommercial::BL . " AND cv.statut_commande_id != 25))
OR
((c.type_document_commercial_id = " . TypeDocumentCommercial::FACTURE . " AND c.statut_commande_id != 23) OR (cv.type_document_commercial_id = " . TypeDocumentCommercial::FACTURE . " AND cv.statut_commande_id != 23))
OR
((c.type_document_commercial_id = " . TypeDocumentCommercial::AVOIR . " AND c.statut_commande_id != 20) or (cv.type_document_commercial_id = " . TypeDocumentCommercial::AVOIR . " AND cv.statut_commande_id != 20))
)
)
AND
ac.article_id = " . $idArticle . "
";
//echo "<br/><br/>".$sql;
$sql = trim($sql);
$em = $this->getEntityManager();
$stmt = $em->getConnection()->prepare($sql);
$total = $stmt->executeQuery()->fetchAllAssociative();
return $total[0]['total'];
}
public function ___totalVenduMois($idArticle, $date)
{
/*
SELECT distinct ar.id as id_article,ar.libelle,ar.reference,ar.stock
FROM `commerciale__article_commande` as ac
LEFT JOIN commerciale__commande as c on ac.commande_id = c.id
LEFT JOIN commerciale__commande as f on c.facture_id = f.id
LEFT JOIN article__article as ar on ar.id = ac.article_id
WHERE c.date >= '2015-09-01 23:59:59' AND c.date <= '2016-09-13 23:59:59'
AND
(
(c.type_document_commercial_id = ".TypeDocumentCommercial::FACTURE." AND c.statut_commande_id != 23 )
OR
(c.type_document_commercial_id = ".TypeDocumentCommercial::BL." AND c.statut_commande_id != 24 AND c.facture_id > 0
AND f.statut_commande_id != 23
)
)
GROUP BY ar.id ORDER BY c.total DESC LIMIT 0,10000000
*/
$sql = "
SELECT sum(COALESCE(ac.quantite,0)) as total
FROM `commerciale__article_commande` as ac
LEFT JOIN commerciale__commande as c on ac.commande_id = c.id
LEFT JOIN commerciale__commande as f on c.facture_id = f.id
WHERE
c.date >= '" . $date->format('Y-m-d ') . "00:00:00' AND c.date <= '" . $date->format('Y-m-t H:i:s') . "'
AND
(
(c.type_document_commercial_id = " . TypeDocumentCommercial::FACTURE . " AND c.statut_commande_id != 23 )
OR
(c.type_document_commercial_id = " . TypeDocumentCommercial::BL . " AND c.statut_commande_id != 24 AND c.facture_id > 0 AND f.multi_bl = 1
AND f.statut_commande_id != 23
)
)
AND
ac.article_id = " . $idArticle . "
";
/*$sql = "
SELECT sum(ac.quantite) as total
FROM `commerciale__article_commande` as ac
LEFT JOIN commerciale__commande as c on ac.commande_id = c.id
WHERE
c.date >= '".$date->format('Y-m-d ')."00:00:00' AND c.date <= '".$date->format('Y-m-t H:i:s')."'
AND
c.type_document_commercial_id = ".TypeDocumentCommercial::FACTURE."
AND
c.statut_commande_id != 23
AND
ac.article_id = ".$idArticle."
";
*/
//echo $sql;
$sql = trim($sql);
$em = $this->getEntityManager();
$stmt = $em->getConnection()->prepare($sql);
$total = $stmt->executeQuery()->fetchAllAssociative();
return $total[0]['total'];
}
public function ___statArticles($parametres = [])
{
$retour = [];
//if(intval($parametres['nbel'])>500) $parametres['nbel'] = 500;
$dateDebut = DateTime::createFromFormat('d/m/Y', $parametres['date_debut']);
$dateDebut->setTime(00, 00, 00);
$dateFin = DateTime::createFromFormat('d/m/Y', $parametres['date_fin']);
$dateFin->setTime(23, 59, 59);
$where = "";
$join = "";
$join_table_client = false;
$join_table_article = false;
$join_table_article = true;
if (array_key_exists('ref_article', $parametres) and $parametres["ref_article"] != "") {
if (!$join_table_article) {
$join .= " LEFT JOIN commerciale__article_commande as ac on ac.commande_id = c.id";
$join .= " LEFT JOIN article__article as ar on ar.id = ac.article_id";
}
$parametres["ref_article"] = str_replace("*", "%", $parametres["ref_article"]);
$where .= " AND ar.reference like '" . $parametres["ref_article"] . "%'";
$join_table_article = true;
}
if (array_key_exists('client', $parametres) and $parametres["client"] != "" and $parametres["client"] > 0) {
//if(!$join_table_client) $join .= " LEFT JOIN client__client as clt on c.client_id = clt.id";
$where .= " AND u.id = '" . $parametres["client"] . "'";
$join_table_client = true;
}
if (array_key_exists('ref_client', $parametres) and $parametres["ref_client"] > 0) {
$join .= " LEFT JOIN client__client as clt on c.client_id = clt.id";
$where .= " AND clt.reference = '" . $parametres["ref_client"] . "'";
$join_table_client = true;
}
if (array_key_exists('nom_client', $parametres) and $parametres["nom_client"] != "") {
if (!$join_table_client) {
$join .= " LEFT JOIN client__client as clt on c.client_id = clt.id";
}
$where .= " AND clt.nom like '%" . $parametres["nom_client"] . "%'";
$join_table_client = true;
}
if (array_key_exists('equipier', $parametres) and $parametres["equipier"] > 0) {
$where .= " AND c.utilisateur_id = '" . $parametres["equipier"] . "'";
}
if (array_key_exists('marque', $parametres) and $parametres["marque"] > 0) {
//echo "MARQUE";
if (!$join_table_article) {
echo "TYTY";
//$join .= " LEFT JOIN commerciale__article_commande as ac on ac.commande_id = c.id";
//$join .= " LEFT JOIN article__article as ar on ar.id = ac.article_id";
}
$where .= " AND ar.marque_id = '" . $parametres["marque"] . "'";
$join_table_article = true;
}
if (array_key_exists('article', $parametres) and $parametres["article"] > 0) {
if (!$join_table_article) {
//$join .= " LEFT JOIN commerciale__article_commande as ac on ac.commande_id = c.id";
//$join .= " LEFT JOIN article__article as ar on ar.id = ac.article_id";
}
$where .= " AND ar.id = '" . $parametres["article"] . "'";
$join_table_article = true;
}
if (array_key_exists('categorie_client', $parametres) and $parametres["categorie_client"] > 0) {
if (!$join_table_client) {
$join .= " LEFT JOIN client__client as clt on c.client_id = clt.id";
}
$join .= " LEFT JOIN client__client_categorie as cltcat on cltcat.client_id = clt.id";
if (array_key_exists('sous_categorie_client', $parametres) and $parametres["sous_categorie_client"] > 0) {
$where .= " AND cltcat.categorie_id = '" . $parametres["sous_categorie_client"] . "'";
} else {
$where .= " AND cltcat.categorie_id = '" . $parametres["categorie_client"] . "'";
}
}
if (array_key_exists('categorie_article', $parametres) and $parametres["categorie_article"] > 0) {
if (!$join_table_article) {
$join .= " LEFT JOIN commerciale__article_commande as ac on ac.commande_id = c.id";
$join .= " LEFT JOIN article__article as ar on ar.id = ac.article_id";
}
$join .= " LEFT JOIN article__article_categorie as artcat on artcat.article_id = ar.id";
$where .= " AND artcat.categorie_id = '" . $parametres["categorie_article"] . "'";
$join_table_article = true;
}
/*
$sql = "
SELECT SUM(ac.total_ht) as total,
SUM(ac.tva_vente) as total_tva,
SUM(ac.quantite) as total_quantite,
SUM(ac.total_ht) as total_ht,
(SUM(ac.total_ht)+SUM(ac.tva_vente)) as total_ca,
ar.reference,
ar.libelle,
ar.id as article_id,
ar.taux_marge,
ar.pump,
ar.marge,
ar.prix_base as prix_achat
FROM `commerciale__article_commande` as ac
LEFT JOIN commerciale__commande as c on ac.commande_id = c.id
LEFT JOIN commerciale__commande as f on c.facture_id = f.id
LEFT JOIN client__client as u on u.id = c.client_id
LEFT JOIN article__article as ar on ar.id = ac.article_id
".$join."
WHERE
c.date >= '".$dateDebut->format('Y-m-d H:i:s')."' AND c.date <= '".$dateFin->format('Y-m-d H:i:s')."'
AND
(
(c.type_document_commercial_id = ".TypeDocumentCommercial::FACTURE." AND c.statut_commande_id != 23 )
OR
(c.type_document_commercial_id = ".TypeDocumentCommercial::BL." AND c.statut_commande_id != 24 AND c.facture_id > 0 AND f.multi_bl = 1
AND f.statut_commande_id != 23
)
)
".$where."
GROUP BY ar.id
ORDER BY reference ASC
LIMIT 0,".intval($parametres['nbel'])."
";
*/
$sql = "
SELECT SUM(COALESCE(ac.prix_achat,0)*COALESCE(ac.quantite,0)) as total,
AVG(COALESCE(ac.cpump,0)) as pump_avg,
SUM(COALESCE(ac.quantite,0)) as total_quantite,"
//."SUM(ac.total_ht) as total_ht,"
//."(SUM(ac.total_ht)+SUM(ac.tva_vente)) as total_ca,"
. "ar.reference,
ar.libelle,
ar.id as article_id,
ar.taux_marge,
ar.pump,
ar.cpump,
ar.produit_interne as est_compose,
ar.virtuel as est_virtuel,
ar.marge,
ar.prix_base as prix_achat
FROM `article__mouvement_stock` as ac
LEFT JOIN commerciale__commande as c on ac.commande_id = c.id
LEFT JOIN commerciale__commande as f on c.facture_id = f.id
LEFT JOIN client__client as u on u.id = c.client_id
LEFT JOIN article__article as ar on ar.id = ac.article_id
" . $join . "
WHERE
ac.article_commande_virtuel_id is null
AND
ac.date_mouvement >= '" . $dateDebut->format('Y-m-d H:i:s') . "' AND ac.date_mouvement <= '" . $dateFin->format('Y-m-d H:i:s') . "'
AND
(
( (c.type_document_commercial_id = " . TypeDocumentCommercial::BL . " AND c.statut_commande_id != 25 AND (c.facture_id is NOT NULL and f.statut_commande_id != 23))
OR
((c.type_document_commercial_id = " . TypeDocumentCommercial::FACTURE . " AND c.statut_commande_id != 23) )
OR
(c.type_document_commercial_id = " . TypeDocumentCommercial::AVOIR . " AND c.statut_commande_id != 20))
)
" . $where . "
GROUP BY ar.id
ORDER BY reference ASC
";
//LIMIT 0,".intval($parametres['nbel'])."
$sql = trim($sql);
//echo "<br/><br/>".$sql;
//exit;
$em = $this->getEntityManager();
$stmt = $em->getConnection()->prepare($sql);
$articles = $stmt->executeQuery()->fetchAllAssociative();
//print_r($articles);
$tableautemp = [];
foreach ($articles as $art) {
$tableautemp[$art["article_id"]] = $art;
$tableautemp[$art["article_id"]]['bl_obj'] = [""];
$tableautemp[$art["article_id"]]['n1'] = [];
}
if (array_key_exists('bl', $parametres) and $parametres["bl"] > 0) {
$sql = "
SELECT SUM(COALESCE(ac.prix_achat,0)*COALESCE(ac.quantite,0)) as total,
AVG(COALESCE(ac.cpump,0)) as pump_avg,
SUM(COALESCE(ac.quantite,0)) as total_quantite,
ar.reference,
ar.libelle,
ar.id as article_id,
ar.taux_marge,
ar.pump,
ar.cpump,
ar.produit_interne as est_compose,
ar.virtuel as est_virtuel,
ar.marge,
ar.prix_base as prix_achat
FROM `article__mouvement_stock` as ac
LEFT JOIN commerciale__commande as c on ac.commande_id = c.id
LEFT JOIN commerciale__commande as f on c.facture_id = f.id
LEFT JOIN client__client as u on u.id = c.client_id
LEFT JOIN article__article as ar on ar.id = ac.article_id
" . $join . "
WHERE
ac.article_commande_virtuel_id is null
AND
ac.date_mouvement >= '" . $dateDebut->format('Y-m-d H:i:s') . "' AND ac.date_mouvement <= '" . $dateFin->format('Y-m-d H:i:s') . "'
AND
(
( (c.type_document_commercial_id = " . TypeDocumentCommercial::BL . " AND c.statut_commande_id != 25))
)
AND (c.facture_id is NULL or f.statut_commande_id = 23)
" . $where . "
GROUP BY ar.id
ORDER BY reference ASC
LIMIT 0," . intval($parametres['nbel']) . "
";
$em = $this->getEntityManager();
$stmt = $em->getConnection()->prepare($sql);
$articles_bl = $stmt->executeQuery()->fetchAllAssociative();
//echo "<div>".$sql."</div>";
//echo "<div>BL BL BL BL BL BL </div>";
if (count($articles_bl) > 0) {
foreach ($articles_bl as $abl) {
//echo "<div>TOTO </div>";
//print_r($abl);
if (array_key_exists($abl["article_id"], $tableautemp)) {
$tableautemp[$abl["article_id"]]["bl_obj"] = $abl;
} else {
$tableautemp[$abl["article_id"]]["reference"] = $abl["reference"];
$tableautemp[$abl["article_id"]]["libelle"] = $abl["libelle"];
$tableautemp[$abl["article_id"]]["article_id"] = $abl["article_id"];
$tableautemp[$abl["article_id"]]["bl_obj"] = $abl;
$tableautemp[$abl["article_id"]]['n1'] = [];
}
}
}
//print_r($articles_bl);
}
//print_r($tableautemp);
//echo "<div>-----------------</div>";
if (array_key_exists('n1', $parametres) and $parametres["n1"] > 0) {
$parametres_n1 = $parametres;
$parametres_n1['n1'] = 0;
//echo "<div>N1</div>";
$dateDebutN1 = DateTime::createFromFormat('d/m/Y', $parametres['date_debut']);
$dateDebutN1->setTime(00, 00, 00);
$dateDebutN1->sub(new DateInterval('P1Y'));
$dateFinN1 = DateTime::createFromFormat('d/m/Y', $parametres['date_fin']);
$dateFinN1->setTime(23, 59, 59);
$dateFinN1->sub(new DateInterval('P1Y'));
$parametres_n1['date_debut'] = $dateDebutN1->format('d/m/Y');
$parametres_n1['date_fin'] = $dateFinN1->format('d/m/Y');
//echo "<div>datedebut ".$parametres_n1['date_debut']."</div>";
//echo "<div>datefin ".$parametres_n1['date_fin']."</div>";
$tableau_temp_n1 = $this->statArticles($parametres_n1);
//echo "<div>---N1-------------</div>";
//print_r($tableau_temp_n1);
//echo "<div>---N1-------------</div>";
if (array_key_exists('articles', $tableau_temp_n1) && is_array($tableau_temp_n1["articles"])) {
if (count($tableau_temp_n1["articles"]) > 0) {
foreach ($tableau_temp_n1["articles"] as $artN1) {
//echo "<div>XXXXXXX ".$artN1["article_id"]."</div>";
//print_r($artN1);
//echo "<div>YYYYYYYY ".$artN1["article_id"]."</div>";
$tableautemp[$artN1["article_id"]]["n1"] = $artN1;
$tableautemp[$artN1["article_id"]]["reference"] = $artN1["reference"];
$tableautemp[$artN1["article_id"]]["libelle"] = $artN1["libelle"];
}
}
}
//echo "<div>--------------------------------</div>";
}
//$retour['articles'] = $articles;
//print_r($tableautemp);
$retour['articles'] = $tableautemp;
return $retour;
}
public function statArticles($parametres = [])
{
$retour = [];
//if(intval($parametres['nbel'])>500) $parametres['nbel'] = 500;
$dateDebut = DateTime::createFromFormat('d/m/Y', $parametres['date_debut']);
$dateDebut->setTime(00, 00, 00);
$dateFin = DateTime::createFromFormat('d/m/Y', $parametres['date_fin']);
$dateFin->setTime(23, 59, 59);
if (!array_key_exists('n1', $parametres)) {
$parametres["n1"] = "0";
}
$where = "";
$join = "";
$join_table_client = false;
$join_table_article = false;
$join_table_article = true;
if (array_key_exists('ref_article', $parametres) and $parametres["ref_article"] != "") {
if (!$join_table_article) {
$join .= " LEFT JOIN commerciale__article_commande as ac on ac.commande_id = c.id";
$join .= " LEFT JOIN article__article as ar on ar.id = ac.article_id";
}
$parametres["ref_article"] = str_replace("*", "%", $parametres["ref_article"]);
$where .= " AND ar.reference like '" . $parametres["ref_article"] . "%'";
$join_table_article = true;
}
if (array_key_exists('client', $parametres) and $parametres["client"] != "" and $parametres["client"] > 0) {
//if(!$join_table_client) $join .= " LEFT JOIN client__client as clt on c.client_id = clt.id";
$where .= " AND u.id = '" . $parametres["client"] . "'";
$join_table_client = true;
}
if (array_key_exists('ref_client', $parametres) and $parametres["ref_client"] > 0) {
$join .= " LEFT JOIN client__client as clt on c.client_id = clt.id";
$where .= " AND clt.reference = '" . $parametres["ref_client"] . "'";
$join_table_client = true;
}
if (array_key_exists('nom_client', $parametres) and $parametres["nom_client"] != "") {
if (!$join_table_client) {
$join .= " LEFT JOIN client__client as clt on c.client_id = clt.id";
}
$where .= " AND clt.nom like '%" . $parametres["nom_client"] . "%'";
$join_table_client = true;
}
if (array_key_exists('equipier', $parametres) and $parametres["equipier"] > 0) {
$where .= " AND c.utilisateur_id = '" . $parametres["equipier"] . "'";
}
if (array_key_exists('marque', $parametres) and $parametres["marque"] > 0) {
//echo "MARQUE";
if (!$join_table_article) {
echo "TYTY";
//$join .= " LEFT JOIN commerciale__article_commande as ac on ac.commande_id = c.id";
//$join .= " LEFT JOIN article__article as ar on ar.id = ac.article_id";
}
$where .= " AND ar.marque_id = '" . $parametres["marque"] . "'";
$join_table_article = true;
}
if (array_key_exists('article', $parametres) and $parametres["article"] > 0) {
if (!$join_table_article) {
//$join .= " LEFT JOIN commerciale__article_commande as ac on ac.commande_id = c.id";
//$join .= " LEFT JOIN article__article as ar on ar.id = ac.article_id";
}
$where .= " AND ar.id = '" . $parametres["article"] . "'";
$join_table_article = true;
}
if (array_key_exists('categorie_client', $parametres) and $parametres["categorie_client"] > 0) {
//if(!$join_table_client) $join .= " LEFT JOIN client__client as clt on c.client_id = clt.id";
$join .= " LEFT JOIN client__client_categorie as cltcat on cltcat.client_id = u.id";
if (array_key_exists('sous_categorie_client', $parametres) and $parametres["sous_categorie_client"] > 0) {
$where .= " AND cltcat.categorie_id = '" . $parametres["sous_categorie_client"] . "'";
} else {
$where .= " AND cltcat.categorie_id = '" . $parametres["categorie_client"] . "'";
}
}
if (array_key_exists('categorie_article', $parametres) and $parametres["categorie_article"] > 0) {
if (!$join_table_article) {
$join .= " LEFT JOIN commerciale__article_commande as ac on ac.commande_id = c.id";
$join .= " LEFT JOIN article__article as ar on ar.id = ac.article_id";
}
$join .= " LEFT JOIN article__article_categorie as artcat on artcat.article_id = ar.id";
$where .= " AND artcat.categorie_id = '" . $parametres["categorie_article"] . "'";
$join_table_article = true;
}
$sql = "
SELECT ar.id as article_id
FROM `article__mouvement_stock` as ac
LEFT JOIN commerciale__commande as c on ac.commande_id = c.id
LEFT JOIN commerciale__commande as f on c.facture_id = f.id
LEFT JOIN client__client as u on u.id = c.client_id
LEFT JOIN article__article as ar on ar.id = ac.article_id
" . $join . "
WHERE
ac.article_commande_virtuel_id is null
AND
ac.date_mouvement >= '" . $dateDebut->format('Y-m-d H:i:s') . "' AND ac.date_mouvement <= '" . $dateFin->format('Y-m-d H:i:s') . "'
AND
(
( (c.type_document_commercial_id = " . TypeDocumentCommercial::BL . " AND c.statut_commande_id != 25 AND (c.facture_id is NOT NULL and f.statut_commande_id != 23))
OR
((c.type_document_commercial_id = " . TypeDocumentCommercial::FACTURE . " AND c.statut_commande_id != 23) )
OR
(c.type_document_commercial_id = " . TypeDocumentCommercial::AVOIR . " AND c.statut_commande_id != 20))
)
" . $where . "
GROUP BY ar.id
ORDER BY ar.reference ASC
";
//LIMIT 0,".intval($parametres['nbel'])."
$sql = trim($sql);
//echo "<br/><br/>".$sql;
//exit;
$em = $this->getEntityManager();
$stmt = $em->getConnection()->prepare($sql);
$articles = $stmt->executeQuery()->fetchAllAssociative();
//print_r($articles);
$tableautemp = [];
foreach ($articles as $art) {
$tableautemp[$art["article_id"]] = $art["article_id"];
}
if (array_key_exists('bl', $parametres) and $parametres["bl"] > 0) {
$sql = "
SELECT ar.id as article_id
FROM `article__mouvement_stock` as ac
LEFT JOIN commerciale__commande as c on ac.commande_id = c.id
LEFT JOIN commerciale__commande as f on c.facture_id = f.id
LEFT JOIN client__client as u on u.id = c.client_id
LEFT JOIN article__article as ar on ar.id = ac.article_id
" . $join . "
WHERE
ac.article_commande_virtuel_id is null
AND
ac.date_mouvement >= '" . $dateDebut->format('Y-m-d H:i:s') . "' AND ac.date_mouvement <= '" . $dateFin->format('Y-m-d H:i:s') . "'
AND
(
( (c.type_document_commercial_id = " . TypeDocumentCommercial::BL . " AND c.statut_commande_id != 25))
)
AND (c.facture_id is NULL or f.statut_commande_id = 23)
" . $where . "
GROUP BY ar.id
ORDER BY ar.reference ASC
LIMIT 0," . intval($parametres['nbel']) . "
";
$em = $this->getEntityManager();
$stmt = $em->getConnection()->prepare($sql);
$articles_bl = $stmt->executeQuery()->fetchAllAssociative();
//echo "<div>".$sql."</div>";
//echo "<div>BL BL BL BL BL BL </div>";
if (count($articles_bl) > 0) {
foreach ($articles_bl as $abl) {
//echo "<div>TOTO </div>";
//print_r($abl);
if (!array_key_exists($abl["article_id"], $tableautemp)) {
$tableautemp[$abl["article_id"]] = $abl["article_id"];
}
}
}
//print_r($articles_bl);
}
//print_r($tableautemp);
//echo "<div>-----------------</div>";
if (array_key_exists('n1', $parametres) and $parametres["n1"] > 0) {
$parametres_n1 = $parametres;
$parametres_n1['n1'] = 0;
//echo "<div>N1</div>";
$dateDebutN1 = DateTime::createFromFormat('d/m/Y', $parametres['date_debut']);
$dateDebutN1->setTime(00, 00, 00);
$dateDebutN1->sub(new DateInterval('P1Y'));
$dateFinN1 = DateTime::createFromFormat('d/m/Y', $parametres['date_fin']);
$dateFinN1->setTime(23, 59, 59);
$dateFinN1->sub(new DateInterval('P1Y'));
$parametres_n1['date_debut'] = $dateDebutN1->format('d/m/Y');
$parametres_n1['date_fin'] = $dateFinN1->format('d/m/Y');
//echo "<div>datedebut ".$parametres_n1['date_debut']."</div>";
//echo "<div>datefin ".$parametres_n1['date_fin']."</div>";
$tableau_temp_n1 = $this->statArticles($parametres_n1);
//echo "<div>COUNT ".count($tableau_temp_n1)."</div>";
//echo "<div>---N1-------------</div>";
//print_r($tableau_temp_n1);
//echo "<div>---N1-------------</div>";
//if(array_key_exists('articles', $tableau_temp_n1) && is_array($tableau_temp_n1["articles"])) {
if (count($tableau_temp_n1) > 0) {
foreach ($tableau_temp_n1 as $artN1) {
if (!array_key_exists($artN1, $tableautemp)) {
$tableautemp[$artN1] = $artN1;
}
}
}
//}
//echo "<div>--------------------------------</div>";
}
//print_r($tableautemp);
return $tableautemp;
}
public function statArticlesAnneePrec($idArticle = "", $debut = "", $fin = "")
{
$join = "";
$where = "";
$dateDebut = DateTime::createFromFormat('d/m/Y', $debut);
$dateDebut->setTime(00, 00, 00);
$dateDebut->sub(new DateInterval('P1Y'));
$dateFin = DateTime::createFromFormat('d/m/Y', $fin);
$dateFin->setTime(23, 59, 59);
$dateFin->sub(new DateInterval('P1Y'));
//echo "<div>DU ".$dateDebut->format("d/m/Y H:i:s")." au ".$dateFin->format("d/m/Y H:i:s")."</div>";
$sql = "
SELECT SUM(COALESCE(ac.total_ht,0)) as total,
SUM(COALESCE(ac.tva_vente,0) as total_tva,
SUM(COALESCE(ac.quantite,0)) as total_quantite,
SUM(COALESCE(ac.total_ht,0)) as total_ht,
(SUM(COALESCE(ac.total_ht,0))+SUM(COALESCE(ac.tva_vente,0))) as total_ca,
ar.reference,
ar.libelle,
ar.id as article_id,
ar.taux_marge,
ar.marge,
ar.prix_base as prix_achat
FROM `commerciale__article_commande` as ac
LEFT JOIN commerciale__commande as c on ac.commande_id = c.id
LEFT JOIN client__client as u on u.id = c.client_id
LEFT JOIN article__article as ar on ar.id = ac.article_id
" . $join . "
WHERE
c.date >= '" . $dateDebut->format('Y-m-d H:i:s') . "' AND c.date <= '" . $dateFin->format('Y-m-d H:i:s') . "'
AND
c.type_document_commercial_id = " . TypeDocumentCommercial::FACTURE . "
AND
c.statut_commande_id != 23
" . $where . "
AND
ar.id = " . $idArticle . "
";
$em = $this->getEntityManager();
$stmt = $em->getConnection()->prepare($sql);
$retour = $stmt->executeQuery()->fetchAllAssociative();
return $retour[0];
}
public function getTotalBlNonFacturer($idArticle = "", $debut = "", $fin = "", $anneePrec = false)
{
$dateDebut = DateTime::createFromFormat('d/m/Y', $debut);
$dateDebut->setTime(00, 00, 00);
$dateFin = DateTime::createFromFormat('d/m/Y', $fin);
$dateFin->setTime(23, 59, 59);
if ($anneePrec) {
$dateDebut->sub(new DateInterval('P1Y'));
$dateFin->sub(new DateInterval('P1Y'));
}
//echo "<div>DU ".$dateDebut->format("d/m/Y H:i:s")." au ".$dateFin->format("d/m/Y H:i:s")."</div>";
$sql = "
SELECT SUM(COALESCE(ac.total_ht,0)) as total,
SUM(COALESCE(ac.tva_vente,0)) as total_tva,
SUM(COALESCE(ac.quantite,0)) as total_quantite,
SUM(COALESCE(ac.total_ht,0)) as total_ht,
(SUM(COALESCE(ac.total_ht,0))+SUM(COALESCE(ac.tva_vente,0))) as total_ca,
ar.reference,
ar.libelle,
ar.id as article_id,
ar.taux_marge,
ar.marge,
ar.prix_base as prix_achat,
c.id
FROM `commerciale__article_commande` as ac
LEFT JOIN commerciale__commande as c on ac.commande_id = c.id
LEFT JOIN client__client as u on u.id = c.client_id
LEFT JOIN article__article as ar on ar.id = ac.article_id
WHERE
c.date >= '" . $dateDebut->format('Y-m-d H:i:s') . "' AND c.date <= '" . $dateFin->format('Y-m-d H:i:s') . "'
AND
c.type_document_commercial_id = " . TypeDocumentCommercial::BL . "
AND
c.statut_commande_id != 25
AND
ar.id = " . $idArticle . "
AND
(c.facture_id IS NULL OR
c.facture_id IN (
SELECT facture_id
FROM commerciale__commande
WHERE
type_document_commercial_id = " . TypeDocumentCommercial::FACTURE . "
AND
statut_commande_id = 23
)
)
";
$sql = "
SELECT SUM(COALESCE(ac.prix_achat,0)) as total,
AVG(COALESCE(ac.cpump,0)) as pump_avg,
SUM(COALESCE(ac.quantite,0)) as total_quantite,
ar.reference,
ar.libelle,
ar.id as article_id,
ar.taux_marge,
ar.pump,
ar.cpump,
ar.marge,
ar.prix_base as prix_achat
FROM `article__mouvement_stock` as ac
LEFT JOIN commerciale__commande as c on ac.commande_id = c.id
LEFT JOIN commerciale__commande as f on c.facture_id = f.id
LEFT JOIN client__client as u on u.id = c.client_id
LEFT JOIN article__article as ar on ar.id = ac.article_id
WHERE
ac.date_mouvement >= '" . $dateDebut->format('Y-m-d H:i:s') . "' AND ac.date_mouvement <= '" . $dateFin->format('Y-m-d H:i:s') . "'
AND
(
( (c.type_document_commercial_id = " . TypeDocumentCommercial::BL . " AND c.statut_commande_id != 25))
)
AND (c.facture_id is NULL or f.statut_commande_id = 23)
AND ar.id = " . $idArticle . "
";
//echo "<div>SQL ".$sql."</div>";
$em = $this->getEntityManager();
$stmt = $em->getConnection()->prepare($sql);
$retour = $stmt->executeQuery()->fetchAllAssociative();
//print_r($retour);
return $retour;
}
public function getTotalBlNonFacturerCa($idArticle = "", $debut = "", $fin = "", $anneePrec = false)
{
/*
$dateDebut = \DateTime::createFromFormat('d/m/Y',$debut);
$dateDebut->setTime(00,00,00);
$dateFin = \DateTime::createFromFormat('d/m/Y',$fin);
$dateFin->setTime(23,59,59);
*/
$dateDebut = DateTime::createFromFormat('d/m/Y', '01/' . $debut);
$dateDebut->setTime(23, 59, 59);
$dateFin = DateTime::createFromFormat('m/Y', $fin);
$dateFin->setTime(23, 59, 59);
if ($anneePrec) {
$dateDebut->sub(new DateInterval('P1Y'));
$dateFin->sub(new DateInterval('P1Y'));
}
//echo "<div>DU ".$dateDebut->format("d/m/Y H:i:s")." au ".$dateFin->format("d/m/Y H:i:s")."</div>";
$sql = "
SELECT SUM(COALESCE(ac.total_ht,0)) as total,
SUM(COALESCE(ac.tva_vente,0)) as total_tva,
SUM(COALESCE(ac.quantite,0)) as total_quantite,
SUM(COALESCE(ac.total_ht,0)) as total_ht,
(SUM(COALESCE(ac.total_ht,0))+SUM(COALESCE(ac.tva_vente,0))) as total_ca,
ar.reference,
ar.libelle,
ar.id as article_id,
ar.taux_marge,
ar.marge,
ar.prix_base as prix_achat,
c.id
FROM `commerciale__article_commande` as ac
LEFT JOIN commerciale__commande as c on ac.commande_id = c.id
LEFT JOIN client__client as u on u.id = c.client_id
LEFT JOIN article__article as ar on ar.id = ac.article_id
WHERE
c.date >= '" . $dateDebut->format('Y-m-d H:i:s') . "' AND c.date <= '" . $dateFin->format('Y-m-d H:i:s') . "'
AND
c.type_document_commercial_id = " . TypeDocumentCommercial::BL . "
AND
c.statut_commande_id != 25
AND
ar.id = " . $idArticle . "
AND
(c.facture_id IS NULL OR
c.facture_id IN (
SELECT facture_id
FROM commerciale__commande
WHERE
type_document_commercial_id = " . TypeDocumentCommercial::FACTURE . "
AND
statut_commande_id = 23
)
)
";
//echo "<div>SQL ".$sql."</div>";
$em = $this->getEntityManager();
$stmt = $em->getConnection()->prepare($sql);
$retour = $stmt->executeQuery()->fetchAllAssociative();
//print_r($retour);
return $retour;
}
public function getArticlesEquivalences($parametres = [])
{
$retour = [];
if (!array_key_exists('nbel', $parametres)) {
$parametres['nbel'] = 200;
}
if (intval($parametres['nbel']) > 500) {
$parametres['nbel'] = 500;
}
$where = "";
$join = "";
if (array_key_exists('ref_article', $parametres) and $parametres["ref_article"] != "") {
$where .= " AND a.reference like '" . $parametres["ref_article"] . "%'";
}
if (array_key_exists('marque', $parametres) and $parametres["marque"] > 0) {
$where .= " AND a.marque_id = '" . $parametres["marque"] . "'";
}
if (array_key_exists('categorie_article', $parametres) and $parametres["categorie_article"] > 0) {
$join .= " LEFT JOIN article__article_categorie as artcat on artcat.article_id = a.id";
$where .= " AND artcat.categorie_id = '" . $parametres["categorie_article"] . "'";
}
if (array_key_exists('exclure', $parametres) and $parametres["exclure"] != "") {
$where .= " AND a.id NOT IN (" . $parametres["exclure"] . ")";
}
$sql = "
SELECT a.libelle,a.id,a.reference,m.libelle as marque
FROM `article__article` as a
LEFT JOIN article__marque as m on m.id = a.marque_id
" . $join . "
WHERE
a.temporaire is null
and (a.archive = 0 or a.archive is null)
" . $where . "
LIMIT 0," . intval($parametres['nbel']) . "
";
$sql = trim($sql);
//echo $sql;
$em = $this->getEntityManager();
$stmt = $em->getConnection()->prepare($sql);
$articles = $stmt->executeQuery()->fetchAllAssociative();
return $articles;
}
public function nbNewSurXjours($nbJours)
{
$date = new Datetime();
$date->sub(new DateInterval('P' . $nbJours . 'D'));
$query = $this->createQueryBuilder('p')
->select("COUNT(p.id) as total")
->where('p.typeDocumentCommercial = :typeDocumentCommercial AND p.statutCommande NOT IN (:statutCommande) AND p.dateSuppression IS NULL AND p.date >= :date')
->setParameters(['typeDocumentCommercial' => TypeDocumentCommercial::COMMANDE, 'statutCommande' => [7], 'date' => $date->format("Y-m-d H:i:s")]);
$res = $query->getQuery()->getOneOrNullResult();
if ($res !== null) {
return $res['total'];
}
return $res;
}
public function getTotauxFactures($commande)
{
$query = $this->createQueryBuilder('p')
//->select("SUM(p.total) as total")
->select("SUM(COALESCE(p.total,0)+COALESCE(p.fraisPortSupplementaire,0)+COALESCE(p.totalFraisPort,0)) as total")
->where('p.commande = :commande AND p.dateSuppression IS NULL AND p.typeDocumentCommercial IN (:typeDocumentCommercial) AND p.statutCommande NOT IN (:statut)')
->setParameters(['commande' => $commande->getId(), 'typeDocumentCommercial' => [TypeDocumentCommercial::FACTURE, TypeDocumentCommercial::AVOIR], 'statut' => [0]]);
$res = $query->getQuery()->getOneOrNullResult();
$retour = 0;
if ($res !== null) {
$retour = $res['total'];
}
return $retour;
}
public function getOrVehiculeClient(VehiculeClient $vehiculesClient)
{
$repo_statut_document = $this->getEntityManager()->getRepository(StatutCommande::class);
$liste_statut = $repo_statut_document->findBy(["documentCommercial" => [2], "ordre" => [0]]);
$query = $this->createQueryBuilder('p')
->where(
'p.typeDocumentCommercial IN (:typeDocumentCommercial)
AND p.dateSuppression IS NULL
AND p.statutCommande NOT IN (:statutCommande)
AND p.vehiculesClient = :vehiculesClient
'
)
->setParameters(['typeDocumentCommercial' => [TypeDocumentCommercial::COMMANDE], 'statutCommande' => $liste_statut, "vehiculesClient" => $vehiculesClient])
->orderBy('p.date', 'DESC');
$res = $query->getQuery()->getResult();
return $res;
}
public function getFacturesNonReglees(Client $client = null)
{
/*
$repo_statut_document = $this->getEntityManager()->getRepository('DTCGestionComercialeBundle:StatutCommande');
$liste_statut = $repo_statut_document->findBy(array("documentCommercial"=>array(6),"ordre"=>array(0)));
*
*/
$repo_statut_paiement = $this->getEntityManager()->getRepository(StatutPaiement::class);
$statut_paiement = $repo_statut_paiement->findOneByOrdre(2);
$where = 'p.typeDocumentCommercial = :typeDocumentCommercial
AND p.dateSuppression IS NULL
AND sc.ordre NOT IN (:statutCommande)
AND p.statutPaiement NOT IN (:statutPaiement)
';
$parameters = ['typeDocumentCommercial' => TypeDocumentCommercial::FACTURE, 'statutCommande' => [0], "statutPaiement" => $statut_paiement];
if (is_object($client)) {
$where .= ' AND p.client = :client';
$parameters['client'] = $client->getId();
}
$query = $this->createQueryBuilder('p')
->join('p.statutCommande', 'sc')
->where($where)
->setParameters($parameters);
$res = $query->getQuery()->getResult();
return $res;
}
public function getFacturesEtAvoirsNonReglees(Client $client = null)
{
$where = 'p.typeDocumentCommercial IN (:typeDocumentCommercial)
AND p.dateSuppression IS NULL
AND sc.ordre NOT IN (:statutCommande)
AND sp NOT IN (:statutPaiement)
';
$parameters = ['typeDocumentCommercial' => [TypeDocumentCommercial::FACTURE, TypeDocumentCommercial::AVOIR], 'statutCommande' => [0], "statutPaiement" => [2, 4]];
if (is_object($client)) {
$where .= ' AND p.client = :client';
$parameters['client'] = $client->getId();
}
$query = $this->createQueryBuilder('p')
->join('p.statutCommande', 'sc')
->join('p.statutPaiement', 'sp')
->where($where)
->setParameters($parameters);
$res = $query->getQuery()->getResult();
return $res;
}
public function getFacturesEtAvoirsNonReglesEtNonLettres(Client $client = null)
{
$where = "p.typeDocumentCommercial IN (:typeDocumentCommercial)
AND p.dateSuppression IS NULL
AND sc.ordre NOT IN (:statutCommande)
AND sp.ordre NOT IN (:statutPaiement)
AND (p.numeroLettrage IS NULL OR p.numeroLettrage = '')
AND (p.lettrage IS NULL OR p.lettrage = '')
";
$parameters = ['typeDocumentCommercial' => [TypeDocumentCommercial::FACTURE, TypeDocumentCommercial::AVOIR], 'statutCommande' => [0], "statutPaiement" => [2, 4]];
if (is_object($client)) {
$where .= ' AND p.client = :client';
$parameters['client'] = $client->getId();
}
$query = $this->createQueryBuilder('p')
->join('p.statutCommande', 'sc')
->join('p.statutPaiement', 'sp')
->where($where)
->setParameters($parameters);
$res = $query->getQuery()->getResult();
return $res;
}
public function getBlsAfacturerMultiBl($clientId)
{
$query = $this->createQueryBuilder('p')
->leftJoin('p.statutCommande', 'sc')
->where('p.typeDocumentCommercial = :typeDocumentCommercial AND p.client = :clientId AND p.aFacturer = 1 AND p.attenteFacturation = 0 AND sc.ordre != 0')
->setParameters(['typeDocumentCommercial' => TypeDocumentCommercial::BL, 'clientId' => $clientId])
->orderBy('p.date', 'DESC');
return $query;
}
public function findBlsOfBp(Commande $bp)
{
$query = $this->createQueryBuilder('p')
->leftJoin('p.statutCommande', 'sc')
->where('p.typeDocumentCommercial = :typeDocumentCommercial AND p.bp = :bp AND sc.ordre != 0')
->setParameters(['typeDocumentCommercial' => TypeDocumentCommercial::BL, 'bp' => $bp])
->orderBy('p.date', 'DESC');
return $query;
}
public function findBlsOfCommande(Commande $commande, $facturesComptabilisees = [])
{
$where = 'p.typeDocumentCommercial = :typeDocumentCommercial AND p.commande = :commande AND sc.ordre != 0';
$parameters = ['typeDocumentCommercial' => TypeDocumentCommercial::BL, 'commande' => $commande];
if (count($facturesComptabilisees) > 0) {
$where .= ' AND f.id NOT IN (:facturesComptabilisees)';
$parameters['facturesComptabilisees'] = $facturesComptabilisees;
}
$query = $this->createQueryBuilder('p')
->leftJoin('p.statutCommande', 'sc')
->leftJoin('p.facture', 'f')
->where($where)
->setParameters($parameters)
->orderBy('p.date', 'DESC');
return $query;
}
public function getNumeroLettrage(Client $client)
{
$query = $this->createQueryBuilder('p')
->select('MAX(p.numeroLettrage)')
->join('p.client', 'cl')
->where('cl.id = :client')
->setParameters(['client' => $client->getId()])//->orderBy('p.date', 'DESC')
;
$res = $query->getQuery()->getSingleScalarResult();
$res++;
return $res;
}
public function getFacturesEtAvoirsClient(Client $client, $start = 0, $length = 25, $sortColumn = 'date', $sortDir = 'DESC', $requete = '')
{
$limit = $start + $length;
$where = 'p.typeDocumentCommercial IN (:typeDocumentCommercial)
AND p.dateSuppression IS NULL
AND s.ordre NOT IN (:ordre)
AND p.client = :client
';
if ($requete != '') {
$where .= $requete;
}
$query = $this->createQueryBuilder('p')
->join('p.statutCommande', 's')
->where($where)
->setParameters(['typeDocumentCommercial' => [TypeDocumentCommercial::FACTURE, TypeDocumentCommercial::AVOIR], "ordre" => [0], "client" => $client])
->add('orderBy', 'p.' . $sortColumn . ' ' . $sortDir);
if ($length > 0) {
$query->setMaxResults($limit);
}
return $query;
/*
$res = $query->getQuery()->getResult();
return $res;
*
*/
}
public function getNbFacturesEtAvoirsClient(Client $client)
{
$query = $this->createQueryBuilder('p')
->select('COUNT(p.id)')
->join('p.statutCommande', 's')
->where(
'p.typeDocumentCommercial IN (:typeDocumentCommercial)
AND p.dateSuppression IS NULL
AND s.ordre NOT IN (:ordre)
AND p.client = :client
'
)
->setParameters(['typeDocumentCommercial' => [TypeDocumentCommercial::FACTURE, TypeDocumentCommercial::AVOIR], "ordre" => [0], "client" => $client]);
return $query->getQuery()->getSingleScalarResult();
}
public function statCaArticles($parametres = [])
{
$limit = "10000000";
$articles = [];
$dateDebut = DateTime::createFromFormat('d/m/Y', '01/' . $parametres['date_debut']);
$dateDebut->setTime(00, 00, 00);
$dateFin = DateTime::createFromFormat('m/Y', $parametres['date_fin']);
$dateFin->setTime(23, 59, 59);
$where = "";
$join = "";
//print_r($parametres);
$calculN1 = false;
if (array_key_exists('n1', $parametres) and $parametres["n1"] == "1") {
$calculN1 = true;
}
$calculBl = false;
if (array_key_exists('bl', $parametres) and $parametres["bl"] == "1") {
$calculBl = true;
}
$articles = [];
$articles[] = ["libelle" => "VC", "stock" => "0"];
$articles[] = ["libelle" => "OR", "stock" => "0"];
$articles[] = ["libelle" => "Atelier", "stock" => "0"];
$articles[] = ["libelle" => "Mag Atelier", "stock" => "0"];
$articles[] = ["libelle" => "Magasin", "stock" => "0"];
$articles[] = ["libelle" => "VO", "stock" => "0"];
$articles[] = ["libelle" => "PO", "stock" => "0"];
$articles[] = ["libelle" => "PE", "stock" => "0"];
$valeurs = [];
$mois = [];
$qteTotal = "";
$qteTotalStock = "";
$qteTotalMois = [];
for ($i = 0; $i < count($articles); $i++) {
$quantite = [];
$mois = [];
$total = 0;
$dateFinBoucle = DateTime::createFromFormat('m/Y', $parametres['date_fin']);
$dateFinBoucle->setTime(23, 59, 59);
//echo "TEST 001";
$dateDebutBoucle = DateTime::createFromFormat('d/m/Y', '01/' . $parametres['date_debut']);
$dateDebutBoucle->setTime(00, 00, 00);
$dateDebutBoucle_n1 = DateTime::createFromFormat('d/m/Y', '01/' . $parametres['date_debut']);
$dateDebutBoucle_n1->setTime(23, 59, 59);
$dateDebutBouclen_1 = $dateDebutBoucle_n1->modify('-1 year');
$qteTotalStock = $qteTotalStock + $articles[$i]['stock'];
while ($dateDebutBoucle < $dateFinBoucle) {
if ($calculN1) {
$mois[] = [$dateDebutBoucle->format("m/Y"), $dateDebutBouclen_1->format("m/Y")];
} else {
$mois[] = [$dateDebutBoucle->format("m/Y")];
}
$valeurs = [];
$valeurs["mois"] = $dateDebutBoucle->format("m/Y");
if ($calculN1) {
$valeurs["moisn_1"] = $dateDebutBouclen_1->format("m/Y");
}
if ($articles[$i]["libelle"] == "VC") {
//$valeurs["quantite"] = "123";
$valeurs["quantite"] = $this->totalVenduMoisType("VC", $dateDebutBoucle, $calculBl);
if ($calculN1) {
$valeurs["quantite_n1"] = $this->totalVenduMoisType("VC", $dateDebutBouclen_1, $calculBl);
}
} elseif ($articles[$i]["libelle"] == "OR") {
$valeurs["quantite"] = $this->totalVenduMoisType("OR", $dateDebutBoucle, $calculBl);
if ($calculN1) {
$valeurs["quantite_n1"] = $this->totalVenduMoisType("OR", $dateDebutBouclen_1, $calculBl);
}
} elseif ($articles[$i]["libelle"] == "Atelier") {
$valeurs["quantite"] = $this->totalVenduMoisType("Atelier", $dateDebutBoucle, $calculBl);
if ($calculN1) {
$valeurs["quantite_n1"] = $this->totalVenduMoisType("OR", $dateDebutBouclen_1, $calculBl);
}
} elseif ($articles[$i]["libelle"] == "Mag Atelier") {
$valeurs["quantite"] = $this->totalVenduMoisType("Mag Atelier", $dateDebutBoucle, $calculBl);
if ($calculN1) {
$valeurs["quantite_n1"] = $this->totalVenduMoisType("OR", $dateDebutBouclen_1, $calculBl);
}
} elseif ($articles[$i]["libelle"] == "Magasin") {
$valeurs["quantite"] = $this->totalVenduMoisType("Magasin", $dateDebutBoucle, $calculBl);
if ($calculN1) {
$valeurs["quantite_n1"] = $this->totalVenduMoisType("OR", $dateDebutBouclen_1, $calculBl);
}
} elseif ($articles[$i]["libelle"] == "VO") {
$valeurs["quantite"] = $this->totalVenduMoisType("VO", $dateDebutBoucle, $calculBl);
if ($calculN1) {
$valeurs["quantite_n1"] = $this->totalVenduMoisType("OR", $dateDebutBouclen_1, $calculBl);
}
} elseif ($articles[$i]["libelle"] == "PO") {
$valeurs["quantite"] = $this->totalVenduMoisType("PO", $dateDebutBoucle, $calculBl);
if ($calculN1) {
$valeurs["quantite_n1"] = $this->totalVenduMoisType("OR", $dateDebutBouclen_1, $calculBl);
}
} elseif ($articles[$i]["libelle"] == "PE") {
$valeurs["quantite"] = $this->totalVenduMoisType("PE", $dateDebutBoucle, $calculBl);
if ($calculN1) {
$valeurs["quantite_n1"] = $this->totalVenduMoisType("OR", $dateDebutBouclen_1, $calculBl);
}
}
$quantite[] = $valeurs;
if (array_key_exists($dateDebutBoucle->format("m/Y"), $qteTotalMois)) {
$qteTotalMois[$dateDebutBoucle->format("m/Y")] += $valeurs["quantite"];
} else {
$qteTotalMois[$dateDebutBoucle->format("m/Y")] = $valeurs["quantite"];
}
if ($calculN1) {
if (array_key_exists($dateDebutBouclen_1->format("m/Y"), $qteTotalMois)) {
$qteTotalMois[$dateDebutBouclen_1->format("m/Y")] += $valeurs["quantite_n1"];
} else {
$qteTotalMois[$dateDebutBouclen_1->format("m/Y")] = $valeurs["quantite_n1"];
}
}
$dateDebutBoucle->add(new DateInterval('P1M'));
$dateDebutBouclen_1->add(new DateInterval('P1M'));
$total = $total + $valeurs["quantite"];
}
$articles[$i]["valeurs"] = $quantite;
$articles[$i]["total"] = $total;
$qteTotal = $qteTotal + $total;
}
//print_r($articles);
$retour = [];
$retour['articles'] = $articles;
$retour['mois'] = $mois;
$retour['total'] = ["valeur" => $qteTotal, "totalMois" => $qteTotalMois, "stock" => $qteTotalStock];
//print_r($retour);
return $retour;
}
public function getCommandeAmaj()
{
$query = $this->createQueryBuilder('p')
->select("p.id, p.dateSuppression")
->join("p.typeDocumentCommercial", "t")
->where('p.maj = 1 AND p.dateSuppression IS NULL AND t.id IN (2,4)')
->orderBy('p.id', 'DESC');
$res = $query->getQuery()->getResult();
return $res;
}
public function getCommandeIdsStatutAmodifier()
{
$query = $this->createQueryBuilder('p')
->select("p.id, p.dateSuppression")
//->join("p.typeDocumentCommercial", "t")
->where('p.statutAmodifier = 1 AND p.dateSuppression IS NULL AND p.typeDocumentCommercial IN (2,3)')
->orderBy('p.id', 'DESC');
$res = $query->getQuery()->getResult();
return $res;
}
public function _getCommandeIdsDateLivraisonTheoriqueAmodifier()
{
$date = new Datetime();
$date->modify('-60 days');
$query = $this->createQueryBuilder('p')
->select("p.id, p.dateSuppression")
->join("p.typeDocumentCommercial", "t")
->where("p.date > '" . $date->format('Y-m-d h:i:s') . "' AND p.dateSuppression IS NULL AND t.id IN (1)")//devis
->orderBy('p.id', 'DESC');
$res = $query->getQuery()->getResult();
return $res;
}
public function getCommandeIdsDateLivraisonTheoriqueAmodifier($articlesId = [])
{
$date = new Datetime();
$date->modify('-60 days');
$where = "p.date > '" . $date->format('Y-m-d h:i:s') . "' AND p.dateSuppression IS NULL AND p.id IN (1)";
$parameters = [];
$query = $this->createQueryBuilder('p')
->select("p.id, p.dateSuppression")
//->join("p.typeDocumentCommercial", "t");
;
if (count($articlesId)) {
$query->leftJoin('p.articleCommande', 'ac')
->leftJoin('ac.article', 'a');
$where .= ' AND a.id IN (:articlesId)';
$parameters['articlesId'] = $articlesId;
}
$query
->where($where)//devis
->orderBy('p.id', 'DESC');
if (count($parameters)) {
$query->setParameters($parameters);
}
$res = $query->getQuery()->getResult();
return $res;
}
public function getCommandeIdsDateExpeditionTheoriqueAmodifier($articlesId = [])
{
$date = new Datetime();
$date->modify('-60 days');
$where = "p.date > '" . $date->format('Y-m-d h:i:s') . "' AND p.dateSuppression IS NULL AND t.id IN (1, 2)";//devis et commande
$parameters = [];
$query = $this->createQueryBuilder('p')
->select("p.id, p.dateSuppression")
->join("p.typeDocumentCommercial", "t");
if (count($articlesId)) {
$query->leftJoin('p.articleCommande', 'ac')
->leftJoin('ac.article', 'a');
$where .= ' AND a.id IN (:articlesId)';
$parameters['articlesId'] = $articlesId;
}
$query
->where($where)//devis
->orderBy('p.id', 'DESC');
if (count($parameters)) {
$query->setParameters($parameters);
}
$res = $query->getQuery()->getResult();
return $res;
}
public function totalVenduMoisType($type = "VC", $date, $integreBl = false)
{
//echo "<div>TYPE:".$type."</div>";
if ($type == "VC") {
$join = "";
$where = "";
$blocBl = "";
if ($integreBl) {
$blocBl = "OR
(c.type_document_commercial_id = " . TypeDocumentCommercial::BL . " AND c.statut_commande_id != 24 AND c.facture_id > 0 AND f.multi_bl = 1
AND f.statut_commande_id != 23 and cc.type_document_commercial_id = " . TypeDocumentCommercial::COMMANDE . " and cc.type_document_commercial_id = " . TypeDocumentCommercial::COMMANDE . "
)";
}
$sql = "
SELECT SUM(COALESCE(ac.total_ht,0)) as total,
SUM(COALESCE(ac.tva_vente,0)) as total_tva,
SUM(COALESCE(ac.quantite,0)) as total_quantite,
SUM(COALESCE(ac.total_ht,0)) as total_ht,
(SUM(COALESCE(ac.total_ht,0))+SUM(COALESCE(ac.tva_vente,0))) as total_ca,
c.id as commande_id,
cc.id as commande__commande_id
FROM `commerciale__article_commande` as ac
LEFT JOIN commerciale__commande as c on ac.commande_id = c.id
LEFT JOIN commerciale__commande as f on c.facture_id = f.id
LEFT JOIN commerciale__commande as cc on c.commande_id = cc.id
LEFT JOIN client__client as u on u.id = c.client_id
LEFT JOIN article__article as ar on ar.id = ac.article_id
" . $join . "
WHERE
c.date >= '" . $date->format('Y-m-d ') . "00:00:00' AND c.date <= '" . $date->format('Y-m-t H:i:s') . "'
AND
(
(c.type_document_commercial_id = " . TypeDocumentCommercial::FACTURE . " AND c.statut_commande_id != 23 and cc.type_document_commercial_id = " . TypeDocumentCommercial::COMMANDE . ")
" . $blocBl . "
)
" . $where . "
";
/*
*/
} elseif ($type == "OR") {
$join = "";
$where = "";
$blocBl = "";
if ($integreBl) {
$blocBl = "OR
(c.type_document_commercial_id = " . TypeDocumentCommercial::BL . " AND c.statut_commande_id != 24 AND c.facture_id > 0 AND f.multi_bl = 1
AND f.statut_commande_id != 23 and cc.type_document_commercial_id = " . TypeDocumentCommercial::COMMANDE . " and cc.type_document_commercial_id = " . TypeDocumentCommercial::ORDREREPARATION . "
)";
}
$sql = "
SELECT SUM(COALESCE(ac.total_ht,0)) as total,
SUM(COALESCE(ac.tva_vente,0)) as total_tva,
SUM(COALESCE(ac.quantite,0)) as total_quantite,
SUM(COALESCE(ac.total_ht,0)) as total_ht,
(SUM(COALESCE(ac.total_ht,0))+SUM(COALESCE(ac.tva_vente,0))) as total_ca,
c.id as commande_id,
cc.id as commande__commande_id
FROM `commerciale__article_commande` as ac
LEFT JOIN commerciale__commande as c on ac.commande_id = c.id
LEFT JOIN commerciale__commande as f on c.facture_id = f.id
LEFT JOIN commerciale__commande as cc on c.commande_id = cc.id
LEFT JOIN client__client as u on u.id = c.client_id
LEFT JOIN article__article as ar on ar.id = ac.article_id
" . $join . "
WHERE
c.date >= '" . $date->format('Y-m-d ') . "00:00:00' AND c.date <= '" . $date->format('Y-m-t H:i:s') . "'
AND
(
(c.type_document_commercial_id = " . TypeDocumentCommercial::FACTURE . " AND c.statut_commande_id != 23 and cc.type_document_commercial_id = " . TypeDocumentCommercial::ORDREREPARATION . ")
" . $blocBl . "
)
" . $where . "
";
} //else if($type == "Atelier") {
else {
$join = "";
$where = "";
$blocBl = "";
if ($integreBl) {
$blocBl = "OR
(c.type_document_commercial_id = " . TypeDocumentCommercial::BL . " AND c.statut_commande_id != 24 AND c.facture_id > 0 AND f.multi_bl = 1
AND f.statut_commande_id != 23 and cc.type_document_commercial_id = " . TypeDocumentCommercial::COMMANDE . " and cc.type_document_commercial_id = " . TypeDocumentCommercial::ORDREREPARATION . "
)";
}
$sql = "
SELECT SUM(COALESCE(ac.total_ht,0)) as total,
SUM(COALESCE(ac.tva_vente,0)) as total_tva,
SUM(COALESCE(ac.quantite,0)) as total_quantite,
SUM(COALESCE(ac.total_ht,0)) as total_ht,
(SUM(COALESCE(ac.total_ht,0))+SUM(COALESCE(ac.tva_vente,0))) as total_ca,
c.id as commande_id,
cc.id as commande__commande_id
FROM `commerciale__article_commande` as ac
LEFT JOIN commerciale__commande as c on ac.commande_id = c.id
LEFT JOIN commerciale__commande as f on c.facture_id = f.id
LEFT JOIN commerciale__commande as cc on c.commande_id = cc.id
LEFT JOIN client__client as u on u.id = c.client_id
LEFT JOIN article__article as ar on ar.id = ac.article_id
" . $join . "
WHERE
c.date >= '" . $date->format('Y-m-d ') . "00:00:00' AND c.date <= '" . $date->format('Y-m-t H:i:s') . "'
AND
(
(c.type_document_commercial_id = " . TypeDocumentCommercial::FACTURE . " AND c.statut_commande_id != 23 and cc.type_document_commercial_id = " . TypeDocumentCommercial::ORDREREPARATION . ")
" . $blocBl . "
)
" . $where . "
";
}
//echo "<div>".$type." ".$sql."<br/><br/></div>";
$sql = trim($sql);
$em = $this->getEntityManager();
$stmt = $em->getConnection()->prepare($sql);
$total = $stmt->executeQuery()->fetchAllAssociative();
//print_r($total);
if (is_array($total) && array_key_exists('0', $total)) {
//echo $sql."<br/>(".$total[0]['total'].")<br/>";
return $total[0]['total'];
} else {
return "0";
}
}
public function calculCaPeriode($type = "VC", $date, $integreBl = false, $n1 = false)
{
$retour = [];
//echo "TYPE ".$type;
//echo "DATE ".$date;
$dateDebut = DateTime::createFromFormat('m/Y', $date);
$dateDebut->modify('first day of this month')->setTime(00, 00, 00);
//echo "DATE DEBUT FORMAT ".$dateDebut->format("Y-m-d H:i:s");
$dateFin = DateTime::createFromFormat('m/Y', $date);
$dateFin->modify('last day of this month')->setTime(23, 59, 59);
//echo $dateFin->format("Y-m-d H:i:s");
if ($n1) {
$dateDebut->sub(new DateInterval('P1Y'));
$dateFin->sub(new DateInterval('P1Y'));
//echo "DATE DEBUT FORMAT ".$dateDebut->format("Y-m-d H:i:s");
//echo "DATE FIN FORMAT ".$dateFin->format("Y-m-d H:i:s");
}
//$dateDebut = \DateTime::createFromFormat('d/m/Y',$parametres['date_debut']);
//$dateDebut->setTime(00,00,00);
//$dateFin = \DateTime::createFromFormat('d/m/Y',$parametres['date_fin']);
//$dateFin->setTime(23,59,59);
$where = "";
$join = "";
$join_table_client = false;
$join_table_article = false;
$join_table_article = true;
//echo "type:".$type;
$total = 0;
if (1 == 1) {
if ($type == "Atelier MO") {
//if($where != "") $where .= " AND";
$where .= " AND ar.main_oeuvre = '1'";
$join .= "LEFT JOIN commerciale__commande as cor on c.commande_id = cor.id";
//$where .= " AND cor.type_document_commercial_id = '3'";
$where .= " AND (cor.type_document_commercial_id = '3' OR (cor.type_document_commercial_id = '7' and corigine.type_document_commercial_id='3'))";
} elseif ($type == "Mag Atelier") {
//if($where != "") $where .= " AND";
$where .= " AND (ar.main_oeuvre = '0' or ar.main_oeuvre = NULL)";
$where .= " AND ar.reference NOT LIKE '%OCCAS%' AND ar.reference NOT LIKE '%DTC-VO%'";
$join .= "LEFT JOIN commerciale__commande as cor on c.commande_id = cor.id";
//$where .= " AND cor.type_document_commercial_id = '3'";
$where .= " AND (cor.type_document_commercial_id = '3' OR (cor.type_document_commercial_id = '7' and corigine.type_document_commercial_id='3'))";
} elseif ($type == "Magasin") {
//if($where != "") $where .= " AND";
//$where .= " AND (ar.main_oeuvre = '0' or ar.main_oeuvre = NULL)";
$where .= " AND ar.reference NOT LIKE '%OCCAS%' AND ar.reference NOT LIKE '%DTC-VO%'";
$join .= "LEFT JOIN commerciale__commande as cor on c.commande_id = cor.id";
//$where .= " AND cor.type_document_commercial_id = '2'";
$where .= " AND (cor.type_document_commercial_id = '2' OR (cor.type_document_commercial_id = '7' and corigine.type_document_commercial_id='2'))";
//370095
$where .= " AND (c.pays_livraison_id = '370095' or c.pays_livraison_id is null)";
} elseif ($type == "VO") {
//if($where != "") $where .= " AND";
$where .= " AND (ar.main_oeuvre = '0' or ar.main_oeuvre = NULL)";
$where .= " AND ar.reference LIKE '%DTC-VO%'";
$join .= "LEFT JOIN commerciale__commande as cor on c.commande_id = cor.id";
//$where .= " AND cor.type_document_commercial_id = '2'";
} elseif ($type == "PO") {
//if($where != "") $where .= " AND";
$where .= " AND (ar.main_oeuvre = '0' or ar.main_oeuvre = NULL)";
$where .= " AND ar.reference LIKE '%OCCAS%'";
$join .= "LEFT JOIN commerciale__commande as cor on c.commande_id = cor.id";
//$where .= " AND cor.type_document_commercial_id = '2'";
} elseif ($type == "PE") {
//if($where != "") $where .= " AND";
$where .= " AND (c.pays_livraison_id != '370095' and c.pays_livraison_id is not null)";
$where .= " AND ar.reference NOT LIKE '%DTC-VO%'";
$where .= " AND ar.reference NOT LIKE '%OCCAS%'";
$join .= "LEFT JOIN commerciale__commande as cor on c.commande_id = cor.id";
$where .= " AND ((cor.type_document_commercial_id != '3' OR (cor.type_document_commercial_id = '7' and corigine.type_document_commercial_id !='3')))";
//$where .= " AND cor.type_document_commercial_id = '2'";
}
}
$sql = "
SELECT SUM(COALESCE(ac.prix_achat,0)*COALESCE(ac.quantite,0)) as total
FROM `article__mouvement_stock` as ac
LEFT JOIN commerciale__commande as c on ac.commande_id = c.id
LEFT JOIN commerciale__commande as corigine on c.commande_id = corigine.id
LEFT JOIN commerciale__commande as f on c.facture_id = f.id
LEFT JOIN client__client as u on u.id = c.client_id
LEFT JOIN article__article as ar on ar.id = ac.article_id
" . $join . "
WHERE
ac.article_commande_virtuel_id is null
AND
(
( (ac.date_mouvement >= '" . $dateDebut->format('Y-m-d H:i:s') . "' AND ac.date_mouvement <= '" . $dateFin->format('Y-m-d H:i:s') . "') and (c.date >= '" . $dateDebut->format(
'Y-m-d H:i:s'
) . "' AND c.date <= '" . $dateFin->format('Y-m-d H:i:s') . "'))
or
(c.date >= '" . $dateDebut->format('Y-m-d H:i:s') . "' AND c.date <= '" . $dateFin->format('Y-m-d H:i:s') . "')
)
AND
(
( (c.type_document_commercial_id = " . TypeDocumentCommercial::BL . " AND c.statut_commande_id != 25 AND (c.facture_id is NOT NULL and f.statut_commande_id != 23))
OR
((c.type_document_commercial_id = " . TypeDocumentCommercial::FACTURE . " AND c.statut_commande_id != 23) )
OR
(c.type_document_commercial_id = " . TypeDocumentCommercial::AVOIR . " AND c.statut_commande_id != 19))
)
" . $where . "
";
$sql = "
SELECT SUM(COALESCE(ac.prix_achat,0)*COALESCE(ac.quantite,0)) as total
FROM `article__mouvement_stock` as ac
LEFT JOIN commerciale__commande as c on ac.commande_id = c.id
LEFT JOIN commerciale__commande as corigine on c.commande_id = corigine.id
LEFT JOIN commerciale__commande as f on c.facture_id = f.id
LEFT JOIN client__client as u on u.id = c.client_id
LEFT JOIN article__article as ar on ar.id = ac.article_id
" . $join . "
WHERE
ac.article_commande_virtuel_id is null
AND
(
( (c.date >= '" . $dateDebut->format('Y-m-d H:i:s') . "' AND c.date <= '" . $dateFin->format('Y-m-d H:i:s') . "'))
or
(f.date >= '" . $dateDebut->format('Y-m-d H:i:s') . "' AND f.date <= '" . $dateFin->format('Y-m-d H:i:s') . "')
)
AND
(
( (
c.type_document_commercial_id = " . TypeDocumentCommercial::BL . " AND c.statut_commande_id != 25
AND (c.facture_id is NOT NULL and f.statut_commande_id != 23)
and (f.date >= '" . $dateDebut->format('Y-m-d H:i:s') . "' AND f.date <= '" . $dateFin->format('Y-m-d H:i:s') . "')
)
OR
((c.type_document_commercial_id = " . TypeDocumentCommercial::FACTURE . " AND c.statut_commande_id != 23) )
OR
(c.type_document_commercial_id = " . TypeDocumentCommercial::AVOIR . " AND c.statut_commande_id != 19))
)
" . $where . "
";
/*
$sql = "
SELECT SUM(COALESCE(ac.prix_achat,0)*COALESCE(ac.quantite,0)) as total
FROM `article__mouvement_stock` as ac
LEFT JOIN commerciale__commande as c on ac.commande_id = c.id
LEFT JOIN commerciale__commande as corigine on c.commande_id = corigine.id
LEFT JOIN commerciale__commande as f on c.facture_id = f.id
LEFT JOIN client__client as u on u.id = c.client_id
LEFT JOIN article__article as ar on ar.id = ac.article_id
".$join."
WHERE
ac.article_commande_virtuel_id is null
AND
ac.date_mouvement >= '".$dateDebut->format('Y-m-d H:i:s')."' AND ac.date_mouvement <= '".$dateFin->format('Y-m-d H:i:s')."'
AND
(
( (c.type_document_commercial_id = ".TypeDocumentCommercial::BL." AND c.statut_commande_id != 25 AND (c.facture_id is NOT NULL and f.statut_commande_id != 23))
OR
((c.type_document_commercial_id = ".TypeDocumentCommercial::FACTURE." AND c.statut_commande_id != 23) )
OR
(c.type_document_commercial_id = ".TypeDocumentCommercial::AVOIR." AND c.statut_commande_id != 19))
)
".$where."
";
*/
$sql = trim($sql);
if ($type == "Magasin") {
//echo $sql;
}
$em = $this->getEntityManager();
$stmt = $em->getConnection()->prepare($sql);
$totalCa = $stmt->executeQuery()->fetchAllAssociative();
//print_r($totalCa);
$total = $totalCa[0]["total"];
//echo "AAA==>".$total;
//$tableautemp = array();
if ($integreBl) {
//echo "INTEG BL";
$sql = "
SELECT SUM(COALESCE(ac.prix_achat,0)*COALESCE(ac.quantite,0)) as total,
AVG(COALESCE(ac.cpump,0)) as pump_avg,
SUM(COALESCE(ac.quantite,0)) as total_quantite,
ar.reference,
ar.libelle,
ar.id as article_id,
ar.taux_marge,
ar.pump,
ar.cpump,
ar.produit_interne as est_compose,
ar.virtuel as est_virtuel,
ar.marge,
ar.prix_base as prix_achat
FROM `article__mouvement_stock` as ac
LEFT JOIN commerciale__commande as c on ac.commande_id = c.id
LEFT JOIN commerciale__commande as corigine on c.commande_id = corigine.id
LEFT JOIN commerciale__commande as f on c.facture_id = f.id
LEFT JOIN client__client as u on u.id = c.client_id
LEFT JOIN article__article as ar on ar.id = ac.article_id
" . $join . "
WHERE
ac.article_commande_virtuel_id is null
AND
(
( (ac.date_mouvement >= '" . $dateDebut->format('Y-m-d H:i:s') . "' AND ac.date_mouvement <= '" . $dateFin->format('Y-m-d H:i:s') . "') and (c.date >= '" . $dateDebut->format(
'Y-m-d H:i:s'
) . "' AND c.date <= '" . $dateFin->format('Y-m-d H:i:s') . "'))
or
(c.date >= '" . $dateDebut->format('Y-m-d H:i:s') . "' AND c.date <= '" . $dateFin->format('Y-m-d H:i:s') . "')
)
AND
(
( (c.type_document_commercial_id = " . TypeDocumentCommercial::BL . " AND c.statut_commande_id != 25))
)
AND (c.facture_id is NULL or f.statut_commande_id = 23)
" . $where . "
";
$em = $this->getEntityManager();
$stmt = $em->getConnection()->prepare($sql);
$totalCa = $stmt->executeQuery()->fetchAllAssociative();
$total = $total + $totalCa[0]["total"];
if ($type == "VO") {
//echo "<br/><br/>".$sql;
}
//print_r($articles_bl);
}
//$retour['articles'] = $tableautemp;
return $total;
}
public function ___calculCaPeriode($type = "VC", $date, $integreBl = false, $n1 = false)
{
$retour = [];
//echo "TYPE ".$type;
//echo "DATE ".$date;
$dateDebut = DateTime::createFromFormat('m/Y', $date);
$dateDebut->modify('first day of this month')->setTime(00, 00, 00);
$dateFin = DateTime::createFromFormat('m/Y', $date);
$dateFin->modify('last day of this month')->setTime(23, 59, 59);
if ($n1) {
$dateDebut->sub(new DateInterval('P1Y'));
$dateFin->sub(new DateInterval('P1Y'));
//echo "DATE DEBUT FORMAT ".$dateDebut->format("Y-m-d H:i:s");
//echo "DATE FIN FORMAT ".$dateFin->format("Y-m-d H:i:s");
}
//$dateDebut = \DateTime::createFromFormat('d/m/Y',$parametres['date_debut']);
//$dateDebut->setTime(00,00,00);
//$dateFin = \DateTime::createFromFormat('d/m/Y',$parametres['date_fin']);
//$dateFin->setTime(23,59,59);
$where = "";
$join = "";
$join_table_client = false;
$join_table_article = false;
$join_table_article = true;
$total = 0;
if ($type == "Atelier MO") {
//if($where != "") $where .= " AND";
$where .= " AND ar.main_oeuvre = '1'";
$join .= "LEFT JOIN commerciale__commande as cor on c.commande_id = cor.id";
//$where .= " AND cor.type_document_commercial_id = '3'";
$where .= " AND (cor.type_document_commercial_id = '3' OR (cor.type_document_commercial_id = '7' and corigine.type_document_commercial_id='3'))";
} elseif ($type == "Mag Atelier") {
//if($where != "") $where .= " AND";
$where .= " AND (ar.main_oeuvre = '0' or ar.main_oeuvre = NULL)";
$where .= " AND ar.reference NOT LIKE '%OCCAS%' AND ar.reference NOT LIKE '%DTC-VO%'";
$join .= "LEFT JOIN commerciale__commande as cor on c.commande_id = cor.id";
//$where .= " AND cor.type_document_commercial_id = '3'";
$where .= " AND (cor.type_document_commercial_id = '3' OR (cor.type_document_commercial_id = '7' and corigine.type_document_commercial_id='3'))";
} elseif ($type == "Magasin") {
//if($where != "") $where .= " AND";
//$where .= " AND (ar.main_oeuvre = '0' or ar.main_oeuvre = NULL)";
$where .= " AND ar.reference NOT LIKE '%OCCAS%' AND ar.reference NOT LIKE '%DTC-VO%'";
$join .= "LEFT JOIN commerciale__commande as cor on c.commande_id = cor.id";
//$where .= " AND cor.type_document_commercial_id = '2'";
$where .= " AND (cor.type_document_commercial_id = '2' OR (cor.type_document_commercial_id = '7' and corigine.type_document_commercial_id='2'))";
//370095
$where .= " AND c.pays_livraison_id = '370095'";
} elseif ($type == "VO") {
//if($where != "") $where .= " AND";
$where .= " AND (ar.main_oeuvre = '0' or ar.main_oeuvre = NULL)";
$where .= " AND ar.reference LIKE '%DTC-VO%'";
$join .= "LEFT JOIN commerciale__commande as cor on c.commande_id = cor.id";
//$where .= " AND cor.type_document_commercial_id = '2'";
} elseif ($type == "PO") {
//if($where != "") $where .= " AND";
$where .= " AND (ar.main_oeuvre = '0' or ar.main_oeuvre = NULL)";
$where .= " AND ar.reference LIKE '%OCCAS%'";
$join .= "LEFT JOIN commerciale__commande as cor on c.commande_id = cor.id";
//$where .= " AND cor.type_document_commercial_id = '2'";
} elseif ($type == "PE") {
//if($where != "") $where .= " AND";
$where .= " AND c.pays_livraison_id != '370095'";
$where .= " AND ar.reference NOT LIKE '%DTC-VO%'";
$where .= " AND ar.reference NOT LIKE '%OCCAS%'";
$join .= "LEFT JOIN commerciale__commande as cor on c.commande_id = cor.id";
//$where .= " AND cor.type_document_commercial_id = '2'";
}
$sql = "
SELECT SUM(COALESCE(ac.prix_achat,0)*COALESCE(ac.quantite,0)) as total
FROM `article__mouvement_stock` as ac
LEFT JOIN commerciale__commande as c on ac.commande_id = c.id
LEFT JOIN commerciale__commande as corigine on c.commande_id = corigine.id
LEFT JOIN commerciale__commande as f on c.facture_id = f.id
LEFT JOIN client__client as u on u.id = c.client_id
LEFT JOIN article__article as ar on ar.id = ac.article_id
" . $join . "
WHERE
ac.article_commande_virtuel_id is null
AND
ac.date_mouvement >= '" . $dateDebut->format('Y-m-d H:i:s') . "' AND ac.date_mouvement <= '" . $dateFin->format('Y-m-d H:i:s') . "'
AND
(
( (c.type_document_commercial_id = " . TypeDocumentCommercial::BL . " AND c.statut_commande_id != 25 AND (c.facture_id is NOT NULL and f.statut_commande_id != 23))
OR
((c.type_document_commercial_id = " . TypeDocumentCommercial::FACTURE . " AND c.statut_commande_id != 23) )
OR
(c.type_document_commercial_id = " . TypeDocumentCommercial::AVOIR . " AND c.statut_commande_id != 19))
)
" . $where . "
";
$sql = trim($sql);
$em = $this->getEntityManager();
$stmt = $em->getConnection()->prepare($sql);
$totalCa = $stmt->executeQuery()->fetchAllAssociative();
//print_r($totalCa);
$total = $totalCa[0]["total"];
//echo "AAA==>".$total;
//$tableautemp = array();
if ($integreBl) {
//echo "INTEG BL";
$sql = "
SELECT SUM(COALESCE(ac.prix_achat,0)*COALESCE(ac.quantite,0)) as total,
AVG(COALESCE(ac.cpump,0)) as pump_avg,
SUM(COALESCE(ac.quantite,0)) as total_quantite,
ar.reference,
ar.libelle,
ar.id as article_id,
ar.taux_marge,
ar.pump,
ar.cpump,
ar.produit_interne as est_compose,
ar.virtuel as est_virtuel,
ar.marge,
ar.prix_base as prix_achat
FROM `article__mouvement_stock` as ac
LEFT JOIN commerciale__commande as c on ac.commande_id = c.id
LEFT JOIN commerciale__commande as f on c.facture_id = f.id
LEFT JOIN client__client as u on u.id = c.client_id
LEFT JOIN article__article as ar on ar.id = ac.article_id
" . $join . "
WHERE
ac.article_commande_virtuel_id is null
AND
ac.date_mouvement >= '" . $dateDebut->format('Y-m-d H:i:s') . "' AND ac.date_mouvement <= '" . $dateFin->format('Y-m-d H:i:s') . "'
AND
(
( (c.type_document_commercial_id = " . TypeDocumentCommercial::BL . " AND c.statut_commande_id != 25))
)
AND (c.facture_id is NULL or f.statut_commande_id = 23)
" . $where . "
";
$em = $this->getEntityManager();
$stmt = $em->getConnection()->prepare($sql);
$totalCa = $stmt->executeQuery()->fetchAllAssociative();
$total = $total + $totalCa[0]["total"];
if ($type == "VO") {
//echo "<br/><br/>".$sql;
}
//print_r($articles_bl);
}
//$retour['articles'] = $tableautemp;
return $total;
}
public function getNbCommandesInternetPayeesNonValidees()
{
$query = $this->createQueryBuilder('x')
->leftjoin('x.reglements', 'r')
->leftjoin('x.acomptes', 'a')
->select("x.id, COUNT(a.id) as totalAcomptes, COUNT(r.id) as totalReglements")
->where("x.origine LIKE 'prestashop' AND (x.valideManuellement = 0 OR x.valideManuellement IS NULL)")
->groupBy('x.id')
->having('totalAcomptes > 0 OR totalReglements > 0');
$res = $query->getQuery()->getResult();
return $res;
}
public function getDate1ereCommandeClient($client)
{
$query = $this->createQueryBuilder('p')
->select("p.date")
->join("p.client", "c")
->where('p.dateSuppression IS NULL AND p.typeDocumentCommercial IN (:typeDocumentCommercial) AND c.id = :client')
->setParameter('client', $client->getId())
->setParameter('typeDocumentCommercial', [TypeDocumentCommercial::COMMANDE, TypeDocumentCommercial::ORDREREPARATION] )
->orderBy('p.id', 'ASC')
->setMaxResults(1);
$res = $query->getQuery()->getResult();
if (empty($res[0])) {
return '';
} else {
return $res[0]['date'];
}
}
public function getCommandes21jours()
{
$parameters = [];
$where = "";
$where = "x.typeDocumentCommercial = :typeDocumentCommercial ";
$parameters["typeDocumentCommercial"] = "2";
$where .= "AND sc.id IN(:statut) ";
$parameters["statut"] = ["6", "9"];
$dateDebut = new DateTime();
$dateDebut->setTime(00, 00, 00);
$dateDebut->sub(new DateInterval('P21D'));
//$dateDebut->sub(new \DateInterval('P31D'));
//$dateDebut->sub(new \DateInterval('P91D'));
//echo $dateDebut->format("Y-m-d H:i:s");
if ($where == "") {
$where .= "x.date >= :date_debut ";
} else {
$where .= "AND x.date >= :date_debut ";
}
//$where .= "AND c.date >= :date_debut ";
$parameters["date_debut"] = $dateDebut;
$query = $this->createQueryBuilder('x')
->select(
' x.referenceMarketPlace as refMP, '
. 'c.nom, '
. 'c.prenom, '
. 'x.rueLivraison as adresse1, '
. 'x.complementLivraison as adresse2, '
. 'x.complementLivraison2 as adresse3, '
. 'x.codePostalLivraisonTexte as code_postal,'
. 'x.villeLivraisonTexte as ville, '
. 'x.paysLivraisonTexte as pays, '
. 'c.telephone, '
. 'c.telephone2, '
. 'c.email,'
. 'x.destinataireLivraisonTexte as destinataireLivraisonTexte,'
. 'x.numeroLivraison as numeroLivraison'
);
if ($where != "") {
$query->where($where)->setParameters($parameters);
}
$query->leftJoin('x.client', 'c')
->leftJoin('x.statutCommande', 'sc');
$query->orderBy('x.date', 'DESC');
$res = $query->getQuery()->getResult();
//print_r($res);
//exit;
return $res;
}
public function getBpFreres($commande)
{
$repo_statut_document = $this->getEntityManager()->getRepository(StatutCommande::class);
$liste_statut = $repo_statut_document->findBy(["documentCommercial" => 4, "ordre" => [0]]);
$query = $this->createQueryBuilder('p')
//->select("p.id")
->where(
'p.id != :bp AND p.commande = :commande AND p.typeDocumentCommercial = :typeDocumentCommercial AND p.dateSuppression IS NULL and p.statutCommande NOT IN (:statutCommande)'
)
->orderBy('p.id', 'ASC')
->setParameters(['commande' => $commande->getCommande(), 'bp' => $commande, 'typeDocumentCommercial' => TypeDocumentCommercial::BP, 'statutCommande' => $liste_statut]);
$res = $query->getQuery()->getResult();
return $res;
}
public function getNbCommandesDisponiblesPourLpPourTransporteur($transporteur)
{
//AND c.compte_market_place_id is not null
//
$where_retrait_mag = "";
if ($transporteur->getId() == 13) {
$where_retrait_mag = " and c.compte_market_place_id = 19 ";
}
$total_commande_valide = 0;
$sql = "select c.*
FROM commerciale__commande as c
LEFT JOIN transporteur__transporteur as t ON c.transporteur_id = t.id
LEFT JOIN client__client as cl ON c.client_id = cl.id
LEFT JOIN commerciale__statut_paiement as sp ON c.statut_paiement_id = sp.id
WHERE c.statut_commande_id = 9
AND c.client_id is not null
AND c.dateSuppression is NULL
AND c.type_document_commercial_id = " . TypeDocumentCommercial::COMMANDE . "
AND c.transporteur_id = " . $transporteur->getId() .
$where_retrait_mag
. " and ((c.compte_market_place_id is NOT NULL AND c.reference_market_place is NOT NULL) OR cl.facturation_multi_bl = 1 OR sp.id IN (2) OR c.total_ttc = 0)"
. " ORDER BY c.date_insertion ASC
LIMIT 0,5000000
";
$sql = trim($sql);
//if($transporteur->getId() == 13) echo "<div>".$sql."</div>";
$em = $this->getEntityManager();
$stmt = $em->getConnection()->prepare($sql);
$commandes = $stmt->executeQuery()->fetchAllAssociative();
//echo "<div>count:".count($commandes)."</div>";
if (count($commandes) == 0) {
//echo "<hr/>";
return 0;
}
foreach ($commandes as $cmde) {
//Avant d'ajouter la commande à une LP on vérifie qu'elle est mono ligne et que le stock est dispo.
$sql_ac = "select *
FROM commerciale__article_commande
WHERE quantite >= 0 AND commande_id = " . $cmde["id"] . "
";
//echo "<div>".$sql_ac."</div>";
$stmt = $em->getConnection()->prepare($sql_ac);
$article_commandes = $stmt->executeQuery()->fetchAllAssociative();
//echo "<br/><br/><div>ref_commande ".$cmde["reference"]."</div>";
//echo "<div>count(article_commandes) ".count($article_commandes)."</div>";
if (count($article_commandes) > 0) {
//On regarde si il existe un bp déja dans une LP pour cette commande
$sql_bp = "select id,reference
FROM commerciale__commande
WHERE type_document_commercial_id = " . TypeDocumentCommercial::BP . "
AND commande_id = " . $cmde["id"] . "
AND statut_commande_id != 24
";
$stmt = $em->getConnection()->prepare($sql_bp);
$bp_commande = $stmt->executeQuery()->fetchAllAssociative();
//echo "<div>count bp ".count($bp_commande)."</div>";
if (count($bp_commande) > 0) {
} else {
$total_commande_valide++;
}
}
}
//echo "<hr/>";
return $total_commande_valide;
}
public function getAvoirsClientEtFacture($facture)
{
$repo_statut_document = $this->getEntityManager()->getRepository(StatutCommande::class);
$liste_statut = $repo_statut_document->findBy(["documentCommercial" => 7, "ordre" => [1]]);
$query = $this->createQueryBuilder('p')//->select("COUNT(p.id) as total")
;
$where = 'p.client = :client AND (p.factureAvoir IS NULL OR p.factureAvoir = :facture) AND p.typeDocumentCommercial = :typeDocumentCommercial AND p.dateSuppression IS NULL AND p.statutCommande IN (:statutCommande)';
$query->where($where)
->setParameters(['facture' => $facture, 'client' => $facture->getClient(), 'typeDocumentCommercial' => TypeDocumentCommercial::AVOIR, 'statutCommande' => $liste_statut]);
$res = $query->getQuery()->getResult();
return $res;
}
public function getBlsSansRapportCloture($transporteur)
{
$query = $this->createQueryBuilder('p')
->leftJoin('p.statutCommande', 'sc')
->where(
'p.typeDocumentCommercial = :typeDocumentCommercial AND sc.ordre != 0 AND p.rapportCloture is null AND p.dateSuppression IS NULL AND p.transporteur = :transporteur'
)
->setParameters(['typeDocumentCommercial' => TypeDocumentCommercial::BL, 'transporteur' => $transporteur]);
$res = $query->getQuery()->getResult();
return $res;
}
public function findCommandesMPSansAcompte()
{
$query = $this->createQueryBuilder('p')
->select('p.id, COUNT(a.id) as total')
->leftJoin('p.compteMarketPlace', 'cmp')
->leftJoin('p.statutCommande', 'sc')
->leftJoin(Acompte::class, 'a', 'with', 'a.commande = p.id')
->where(
'p.date > :dateDebut AND p.typeDocumentCommercial = ' . TypeDocumentCommercial::COMMANDE . ' AND sc.ordre NOT IN (0) AND p.dateSuppression IS NULL and p.referenceMarketPlace IS NOT NULL AND cmp.id IN (:comptesMarketPlace)'
)
->setParameters(['comptesMarketPlace' => [11, 12, 13, 15], 'dateDebut' => '2021-07-01 00:00:00'])
->groupBy('p.id')
->having('total = 0')
->orderBy('p.date', 'ASC');
$res = $query->getQuery()->getResult();
return $res;
}
public function getFacturesEtAvoirs($parametres)
{
$where = 'p.dateSuppression IS NULL AND p.typeDocumentCommercial IN (:types) AND sc.ordre NOT IN (:statutCommande)';
$parameters = [
'types' => [6, 7],//Facture et avoirs
'statutCommande' => [0],
//'commande' => $commande
];
if (!empty($parametres["date_debut_ca_pfc"])) {
$dateDebut = DateTime::createFromFormat('d/m/Y', $parametres["date_debut_ca_pfc"]);
$where .= " AND p.date >= '" . $dateDebut->format('Y-m-d 00:00:00') . "'";
}
if (!empty($parametres["date_fin_ca_pfc"])) {
$dateFin = DateTime::createFromFormat('d/m/Y', $parametres["date_fin_ca_pfc"]);
$where .= " AND p.date <= '" . $dateFin->format('Y-m-d 23:59:59') . "'";
}
$query = $this->createQueryBuilder('p')
//->select("p.id")
->join('p.statutCommande', 'sc')
->where($where)
->setParameters($parameters)//->setMaxResults(100)
;
//dump($query->getQuery()->getSql());
return $query->getQuery()->getResult();
}
public function getcommandeEnRAlPourCF($commandeCF, $recherche, $maxResults = 25, $parametres = [])
{
$query = $this->createQueryBuilder('p')
->select("DISTINCT(c.id) as id, c.reference")
->leftJoin(ArticleCommande::class, 'ac', 'with', 'ac.article = p.id')
->join('ac.commande', 'c')
->leftJoin(TypeDocumentCommercial::class, 'td', 'with', 'td.id = c.typeDocumentCommercial')
->join('c.client', 'cl')
->where('ac.ralClient > 0 and p.id IN (:ids) and td.id IN (:typeDocument)')
->setParameters(['ids' => $articles, 'typeDocument' => [2, 3]]);
$res = $query->getQuery()->getResult();
return $res;
//print_r($parametres);
$cond = $recherche . "%";
if (strpos($cond, "*") !== false) {
$cond = str_replace("*", "%", $cond);
}
if (array_key_exists('archive_recherche', $parametres)) {
$query = $this->createQueryBuilder('p')
->leftJoin(VehiculeClient::class, 'v', 'with', 'p.vehiculesClient = v.id')
->where('(p.reference LIKE :cond or p.referenceMarketPlace LIKE :cond or v.immatriculation = :recherche) AND p.typeDocumentCommercial = :typeDocumentCommercial')
->setParameters(['recherche' => $recherche, 'cond' => $cond, 'typeDocumentCommercial' => TypeDocumentCommercial::COMMANDE])
->setFirstResult(0)
->setMaxResults($maxResults)
->orderBy('p.date', 'DESC');
} else {
$query = $this->createQueryBuilder('p')
->leftJoin(VehiculeClient::class, 'v', 'with', 'p.vehiculesClient = v.id')
->where('(p.reference LIKE :cond or p.referenceMarketPlace LIKE :cond or v.immatriculation = :recherche) AND p.typeDocumentCommercial = :typeDocumentCommercial')
->setParameters(['recherche' => $recherche, 'cond' => $cond, 'typeDocumentCommercial' => TypeDocumentCommercial::COMMANDE])
->setFirstResult(0)
->setMaxResults($maxResults)
->orderBy('p.date', 'DESC');
}
$res = $query->getQuery()->getResult();
return $res;
//return array(0=>array('id'=>1));
}
public function getTotalFabrications($commande = "")
{
$sql = 'select count(*) as total
from commerciale__fabrication f
LEFT JOIN commerciale__article_commande ac ON f.article_commande_commande_client_id = ac.id
where
ac.commande_id = '.$commande->getid().'
';
$em = $this->getEntityManager();
$stmt = $em->getConnection()->prepare($sql);
$res = $stmt->executeQuery()->fetchAllAssociative();
return $res[0]["total"];
}
}