src/Service/Articles/ArticleService.php line 7069

Open in your IDE?
  1. <?php
  2. namespace App\Service\Articles;
  3. use App\Entity\Articles\ArticleCategorie;
  4. use App\Entity\Articles\ArticleDateDispo;
  5. use App\Entity\Articles\ArticleComplementOption;
  6. use App\Entity\Articles\ArticleComposant;
  7. use App\Entity\Articles\Categorie;
  8. use App\Entity\Articles\Colis;
  9. use App\Entity\Articles\Concurrence;
  10. use App\Entity\Articles\ConditionVente;
  11. use App\Entity\Articles\Declinaison;
  12. use App\Entity\Articles\Devise;
  13. use App\Entity\Articles\Document;
  14. use App\Entity\Articles\Image;
  15. use App\Entity\Articles\NumeroSerie;
  16. use App\Entity\Articles\PrixDegressif;
  17. use App\Entity\Articles\PrixPromo;
  18. use App\Entity\Articles\RaisonMouvementStock;
  19. use App\Entity\Articles\ValeurAttributArticle;
  20. use App\Entity\Clients\Client;
  21. use App\Entity\FO\Parametrage;
  22. use App\Entity\GestionComerciale\Fabrication;
  23. use App\Entity\Localisation\Zone;
  24. use App\Entity\MarketPlace\ArticleMarketPlace;
  25. use App\Entity\MarketPlace\ArticleMarketPlaceImage;
  26. use App\Entity\MarketPlace\CompteMarketPlace;
  27. use App\Entity\Notes\Note;
  28. use App\Entity\QrCode\QrCode;
  29. use App\Entity\Rangements\Emplacement;
  30. use App\Entity\Remises\Remise;
  31. use App\Entity\Taxes\RegleTaxe;
  32. use App\Entity\Taxes\RegleTaxePays;
  33. use App\Entity\Taxes\Taxe;
  34. use App\Entity\Vehicules\Application;
  35. use App\Model\GestionCommerciale\TypeDocumentCommercial;
  36. use App\Model\Transporteurs\TypeZoneLivraison;
  37. use App\Entity\Taxes\RegleTaxeZoneLivraison;
  38. use App\Service\Clients\ClientService;
  39. use App\Service\MarketPlace\EbayService;
  40. use Doctrine\ORM\EntityManagerInterface;
  41. use App\Entity\Articles\Article;
  42. use App\Entity\GestionComerciale\ArticleCommande;
  43. use App\Entity\GestionComerciale\Commande;
  44. use App\Entity\GestionComerciale\CommandeFournisseur;
  45. use App\Entity\Articles\ConditionAchat;
  46. use App\Entity\Articles\MouvementStock;
  47. use App\Entity\Fournisseurs\Fournisseur;
  48. use App\Entity\FO\Cron;
  49. use App\Entity\Articles\HistoriqueArticle;
  50. use Cocur\Slugify\Slugify;
  51. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  52. use Symfony\Component\Security\Core\Security;
  53. class ArticleService
  54. {
  55.     private $entityManager;
  56.     private Security $security;
  57.     private MouvementStockService $mouvementStockService;
  58.     private ClientService $clientService;
  59.     private EbayService $ebayService;
  60.     private ImageArticleService $imageArticleService;
  61.     private DocumentArticle $documentArticleService;
  62.     private UrlGeneratorInterface $urlGenerator;
  63.     public function __construct(EntityManagerInterface $entityManagerSecurity $securityMouvementStockService $mouvementStockServiceClientService $clientService,
  64.                                 EbayService            $ebayServiceImageArticleService $imageArticleServiceDocumentArticle $documentArticleServiceUrlGeneratorInterface $urlGenerator
  65.     ) {
  66.         $this->entityManager          $entityManager;
  67.         $this->security               $security;
  68.         $this->mouvementStockService  $mouvementStockService;
  69.         $this->clientService          $clientService;
  70.         $this->ebayService            $ebayService;
  71.         $this->imageArticleService    $imageArticleService;
  72.         $this->documentArticleService $documentArticleService;
  73.         $this->urlGenerator           $urlGenerator;
  74.     }
  75.     public function estArchivable($id)
  76.     {
  77.         $class $this->couleurLigne($id);
  78.         if ($class == "info") {
  79.             return true;
  80.         }
  81.         return false;
  82.     }
  83.     public function getObjet($id)
  84.     {
  85.         $article $this->entityManager->getRepository(Article::class)->find($id);
  86.         return $article;
  87.     }
  88.     public function couleurLigne($articleId)
  89.     {
  90.         $repo_article_market_place $this->entityManager->getRepository(ArticleMarketPlace::class);
  91.         $repo_compte_market_place  $this->entityManager->getRepository(CompteMarketPlace::class);
  92.         $compteMarketPlace         $repo_compte_market_place->findAll();
  93.         $nbAnnonces                     $repo_article_market_place->getNbAnnoncesParArticle($articleId);
  94.         $nbAnnoncesPubliees             $repo_article_market_place->getNbAnnoncesPublieesParArticle($articleId);
  95.         $unCompteMarketPlaceSansAnnonce $repo_article_market_place->unCompteMarketPlaceSansAnnonce($articleId);
  96.         $class 'warning';
  97.         if ($nbAnnoncesPubliees['total'] == || $unCompteMarketPlaceSansAnnonce) {
  98.             $class 'danger';
  99.         } elseif ($nbAnnonces['total'] == $nbAnnoncesPubliees['total']) {
  100.             $class 'success';
  101.         }
  102.         $couleurBleu             true;
  103.         $auMoinsUneAnnoncePublie false;
  104.         foreach ($compteMarketPlace as $cmp) {
  105.             if ($cmp->getId() != 6) {
  106.                 $total  $repo_article_market_place->getNbAnnoncesPublieesParArticleEtCompteMarketPlace($articleId$cmp);
  107.                 $total2 $repo_article_market_place->getNbAnnoncesParArticleEtCompteMarketPlace($articleId$cmp);
  108.                 //$nbAnnonces = $repo_article_market_place->getNbAnnoncesParArticleEtCompteMarketPlace($articleId, $compteMarketPlaceId);
  109.                 if ($total["total"] > && $total2["total"] > 0) {
  110.                     $couleurBleu false;
  111.                 }
  112.                 if ($total2["total"] > 0) {
  113.                     $auMoinsUneAnnoncePublie true;
  114.                 }
  115.                 //echo "<div>CMP : ".$cmp->getLibelle()."</div>";
  116.                 //echo "<div>getNbAnnoncesPublieesParArticleEtMarketPlace : ".$total["total"]."</div>";
  117.                 //echo "<div>getNbAnnoncesParArticleEtMarketPlace : ".$total2["total"]."</div>";
  118.             }
  119.         }
  120.         if ($couleurBleu && $auMoinsUneAnnoncePublie && ! $unCompteMarketPlaceSansAnnonce) {
  121.             $class 'info';
  122.         }
  123.         $infosDebug ' '.$nbAnnonces['total'].'/'.$nbAnnoncesPubliees['total'];
  124.         //$class .= ' nbAnnonces-'.$nbAnnonces['total'].' nbAnnoncesPubliees-'.$nbAnnoncesPubliees['total'].' unCompteMarketPlaceSansAnnonce-'.$unCompteMarketPlaceSansAnnonce;
  125.         //$class = 'info';
  126.         return $class;
  127.     }
  128.     public function testReferenceArticleExiste($reference "")
  129.     {
  130.         if ($reference == "") {
  131.             return true;
  132.         } else {
  133.             $repo_article $this->entityManager->getRepository(Article::class);
  134.             $existe       $repo_article->testReferenceArticleExiste($reference);
  135.             if (count($existe) == 1) {
  136.                 if ($existe[0]["total"] == "0") {
  137.                     return false;
  138.                 }
  139.             }
  140.         }
  141.         return true;
  142.     }
  143.     public function majDeclinaison($id_article_enfant$article)
  144.     {
  145.         $date            = new \Datetime();
  146.         $repo_valeurs    $this->entityManager->getRepository(ValeurAttributArticle::class);
  147.         $repo_article    $this->entityManager->getRepository(Article::class);
  148.         $repo_cond_vente $this->entityManager->getRepository(ConditionVente::class);
  149.         $parametrage     $this->entityManager->getRepository(Parametrage::class)->find(1);
  150.         $regles $parametrage->getReglesDeclinaisonUnserialize();
  151.         $tableau_update = [];
  152.         $tableau_update["reference_client"]      = $article->getReferenceClient();
  153.         $tableau_update["reference_fournisseur"] = null;
  154.         if (array_key_exists('copier_ref_fournisseur'$regles) && $regles["copier_ref_fournisseur"] == "1") {
  155.             $tableau_update["reference_fournisseur"] = $article->getReferenceFournisseur();
  156.         }
  157.         $tableau_update["prix_base"] = $article->getPrixBase();
  158.         if (is_object($article->getMarque())) {
  159.             $tableau_update["marque_id"] = $article->getMarque()->getId();
  160.         } else {
  161.             $tableau_update["marque_id"] = null;
  162.         }
  163.         $tableau_update["date_maj"] = $date->format("Y-m-d H:i:s");
  164.         if (array_key_exists('copier_desc'$regles) && $regles["copier_desc"] == "1") {
  165.             $tableau_update["description"] = $article->getDescription();
  166.         }
  167.         if (array_key_exists('copier_desc_courte'$regles) && $regles["copier_desc_courte"] == "1") {
  168.             $tableau_update["description_courte"] = $article->getDescriptionCourte();
  169.         }
  170.         if (array_key_exists('copier_dim'$regles) && $regles["copier_dim"] == "1") {
  171.             $tableau_update["largeur"]    = $article->getLargeur();
  172.             $tableau_update["profondeur"] = $article->getProfondeur();
  173.             $tableau_update["hauteur"]    = $article->getHauteur();
  174.             $tableau_update["poids"]      = $article->getPoids();
  175.         }
  176.         if ($article->getStatut()) {
  177.             $tableau_update["statut"] = 1;
  178.         } else {
  179.             $tableau_update["statut"] = 0;
  180.         }
  181.         if ($article->getAConsigner()) {
  182.             $tableau_update["a_consigner"] = 1;
  183.         } else {
  184.             $tableau_update["a_consigner"] = 0;
  185.         }
  186.         if ($article->getConsigne()) {
  187.             $tableau_update["consigne"] = 1;
  188.         } else {
  189.             $tableau_update["consigne"] = 0;
  190.         }
  191.         if ($article->getStockAuto()) {
  192.             $tableau_update["stock_auto"] = 1;
  193.         } else {
  194.             $tableau_update["stock_auto"] = 0;
  195.         }
  196.         if ($article->getArretGamme()) {
  197.             $tableau_update["arret_gamme"] = 1;
  198.         } else {
  199.             $tableau_update["arret_gamme"] = 0;
  200.         }
  201.         if (is_object($article->getRegleTaxe())) {
  202.             $tableau_update["regle_taxe_id"] = $article->getRegleTaxe()->getId();
  203.         } else {
  204.             $tableau_update["regle_taxe_id"] = 1;
  205.         }
  206.         $tableau_update["remise_max"]            = $article->getRemiseMax();
  207.         $tableau_update["type_remise_max"]       = $article->getTypeRemiseMax();
  208.         $tableau_update["seuil_commande_f_mini"] = $article->getSeuilMiniCommandeFournisseur();
  209.         $tableau_update["seuil_commande_f_maxi"] = $article->getSeuilMaxiCommandeFournisseur();
  210.         $tableau_update["niveau_un_id"]          = null;
  211.         $tableau_update["niveau_deux_id"]        = null;
  212.         $tableau_update["niveau_trois_id"]       = null;
  213.         $tableau_update["niveau_quatre_id"]      = null;
  214.         $tableau_update["commentaire"] = $article->getCommentairePonctuel();
  215.         if ($article->getVirtuel()) {
  216.             $tableau_update["virtuel"] = 1;
  217.         } else {
  218.             $tableau_update["virtuel"] = 0;
  219.         }
  220.         $tableau_update["prix_vente"]      = $article->getPrixVente();
  221.         $tableau_update["taux_marge"]      = $article->getTauxMarge();
  222.         $tableau_update["marge"]           = $article->getMarge();
  223.         $tableau_update["marge_reelle"]    = $article->getMargeReelle();
  224.         $tableau_update["ecotaxe"]         = $article->getEcotaxe();
  225.         $tableau_update["conditionnement"] = $article->getConditionnement();
  226.         if (is_object($article->getFournisseurDefaut())) {
  227.             $tableau_update["fournisseur_defaut_id"] = $article->getFournisseurDefaut()->getId();
  228.         } else {
  229.             $tableau_update["fournisseur_defaut_id"] = null;
  230.         }
  231.         $tableau_update["id_import"] = null;
  232.         if ($article->getProduitInterne()) {
  233.             $tableau_update["produit_interne"] = 1;
  234.         } else {
  235.             $tableau_update["produit_interne"] = 0;
  236.         }
  237.         $tableau_update["donnees_import"] = null;
  238.         if ($article->getMajPrix()) {
  239.             $tableau_update["maj_prix"] = 1;
  240.         } else {
  241.             $tableau_update["maj_prix"] = 0;
  242.         }
  243.         if (is_object($article->getUniteMesure())) {
  244.             $tableau_update["unite_mesure_id"] = $article->getUniteMesure()->getId();
  245.         } else {
  246.             $tableau_update["unite_mesure_id"] = null;
  247.         }
  248.         if ($article->getAfficherComposantPdfInterne()) {
  249.             $tableau_update["afficher_composant_pdf_interne"] = 1;
  250.         } else {
  251.             $tableau_update["afficher_composant_pdf_interne"] = 0;
  252.         }
  253.         if ($article->getAfficherComposantPdfExterne()) {
  254.             $tableau_update["afficher_composant_pdf_externe"] = 1;
  255.         } else {
  256.             $tableau_update["afficher_composant_pdf_externe"] = 0;
  257.         }
  258.         if (is_object($article->getCategorieRemiseArticle())) {
  259.             $tableau_update["categorie_remise_article_id"] = $article->getCategorieRemiseArticle()->getId();
  260.         } else {
  261.             $tableau_update["categorie_remise_article_id"] = null;
  262.         }
  263.         $tableau_update["libelle_secondaire"]       = $article->getLibelleSecondaire();
  264.         $tableau_update["quantite_conseillee_mini"] = $article->getQuantiteConseilleeMini();
  265.         $tableau_update["quantite_conseillee"]      = $article->getQuantiteConseillee();
  266.         $tableau_update["quantite_conseillee_maxi"] = $article->getQuantiteConseilleeMaxi();;
  267.         $tableau_update["archive"]                      = 0;
  268.         $tableau_update["coefficient_px_base_px_vente"] = $article->getCoefficientPrixBaseVente();
  269.         $tableau_update["reference_appel_1"]  = $article->getReferenceAppel1();
  270.         $tableau_update["reference_appel_2"]  = $article->getReferenceAppel2();
  271.         $tableau_update["reference_appel_3"]  = $article->getReferenceAppel3();
  272.         $tableau_update["reference_appel_4"]  = $article->getReferenceAppel4();
  273.         $tableau_update["reference_appel_5"]  = $article->getReferenceAppel5();
  274.         $tableau_update["reference_appel_6"]  = $article->getReferenceAppel6();
  275.         $tableau_update["reference_appel_7"]  = $article->getReferenceAppel7();
  276.         $tableau_update["reference_appel_8"]  = $article->getReferenceAppel8();
  277.         $tableau_update["reference_appel_9"]  = $article->getReferenceAppel9();
  278.         $tableau_update["reference_appel_10"] = $article->getReferenceAppel10();
  279.         //$tableau_update["reference_appel_11"]=$tab_declinaison["reference"];
  280.         if ($article->getMainOeuvre()) {
  281.             $tableau_update["main_oeuvre"] = 1;
  282.         } else {
  283.             $tableau_update["main_oeuvre"] = 0;
  284.         }
  285.         if (is_object($article->getType())) {
  286.             $tableau_update["type_id"] = $article->getType()->getId();
  287.         } else {
  288.             $tableau_update["type_id"] = null;
  289.         }
  290.         if (is_object($article->getFamilleCompta())) {
  291.             $tableau_update["famille_compta_id"] = $article->getFamilleCompta()->getId();
  292.         } else {
  293.             $tableau_update["famille_compta_id"] = null;
  294.         }
  295.         if ($article->getPrestation()) {
  296.             $tableau_update["prestation"] = 1;
  297.         } else {
  298.             $tableau_update["prestation"] = 0;
  299.         }
  300.         if ($article->getNonStocke()) {
  301.             $tableau_update["non_stocke"] = 1;
  302.         } else {
  303.             $tableau_update["non_stocke"] = 0;
  304.         }
  305.         if ($article->getNonCommandable()) {
  306.             $tableau_update["non_commandable"] = 1;
  307.         } else {
  308.             $tableau_update["non_commandable"] = 0;
  309.         }
  310.         if ($article->getNumSerieObligatoire()) {
  311.             $tableau_update["num_serie_obligatoire"] = 1;
  312.         } else {
  313.             $tableau_update["num_serie_obligatoire"] = 0;
  314.         }
  315.         if (is_object($article->getArticleRemplacement())) {
  316.             $tableau_update["article_remplacement_id"] = $article->getArticleRemplacement()->getId();
  317.         } else {
  318.             $tableau_update["article_remplacement_id"] = null;
  319.         }
  320.         $tableau_update["cond_achat"]      = $article->getConditionnementAchat();
  321.         $tableau_update["est_commentaire"] = 0;
  322.         $tableau_update["seuil_critique"]  = $article->getSeuilCritique();
  323.         if (is_object($article->getRegleTaxeAchat())) {
  324.             $tableau_update["regle_taxe_achat_id"] = $article->getRegleTaxeAchat()->getId();
  325.         } else {
  326.             $tableau_update["regle_taxe_achat_id"] = null;
  327.         }
  328.         if ($article->getUniversel()) {
  329.             $tableau_update["universel"] = 1;
  330.         } else {
  331.             $tableau_update["universel"] = 0;
  332.         }
  333.         $tableau_update["delai_reappro"]          = $article->getDelaiReappro();
  334.         $tableau_update["prix_revient"]           = $article->getPrixRevient();
  335.         $tableau_update["frais_fonctionnement"]   = $article->getFraisFonctionnement();
  336.         $tableau_update["nomenclature_douaniere"] = $article->getNomenclatureDouaniere();
  337.         $tableau_update["unspsc"]                 = $article->getUnspsc();
  338.         if (is_object($article->getTransporteur())) {
  339.             $tableau_update["transporteur_id"] = $article->getTransporteur()->getId();
  340.         } else {
  341.             $tableau_update["transporteur_id"] = null;
  342.         }
  343.         if (is_object($article->getAtelier())) {
  344.             $tableau_update["atelier_id"] = $article->getAtelier()->getId();
  345.         } else {
  346.             $tableau_update["atelier_id"] = null;
  347.         }
  348.         $tableau_update["commentaire_dimensions"] = $article->getCommentaireDimensions();
  349.         $tableau_update["ecocontribution"]        = $article->getEcocontribution();
  350.         if (is_object($article->getFamilleCompta())) {
  351.             $tableau_update['famille_compta_id'] = $article->getFamilleCompta()->getId();
  352.         }
  353.         //$tableau_update['reference'] = $tab_declinaison["reference"];
  354.         //$tableau_update['libelle'] = $tab_declinaison["libelle"];
  355.         $tableau_update['article_declinaison_parent_id'] = $article->getId();
  356.         $conn $this->entityManager->getConnection();
  357.         $conn->update('article__article'$tableau_update, ['id' => $id_article_enfant]);
  358.         $id_article $id_article_enfant;
  359.         if ($id_article != "") {
  360.             $articleClone $repo_article->find($id_article);
  361.             if (is_object($articleClone) && array_key_exists('copier_images'$regles) && $regles["copier_images"] == "1") {
  362.                 $repo_article_image $this->entityManager->getRepository(Image::class);
  363.                 $images_article     $repo_article_image->findBy(["article" => $article]);
  364.                 $sql  "DELETE FROM `article__image` WHERE article_id=".$id_article."";
  365.                 $stmt $this->entityManager->getConnection()->prepare($sql);
  366.                 $stmt->execute();
  367.                 exec(
  368.                     "rm -rf uploads/articles/images/".$articleClone->getDate()->format("Y")."/".$articleClone->getDate()->format("m")."/".$articleClone->getDate()->format(
  369.                         "d"
  370.                     )."/".$articleClone->getId()."/*"
  371.                 );
  372.                 if (count($images_article) > 0) {
  373.                     foreach ($images_article as $imageArticle) {
  374.                         $image_parent = clone $imageArticle;
  375.                         $image_parent->setArticle($articleClone);
  376.                         $image_parent->setDate(new \Datetime());
  377.                         $this->entityManager->persist($image_parent);
  378.                         $tab_dossiers = ["large""medium""originals""small""thumbnails"];
  379.                         for ($t 0$t count($tab_dossiers); $t++) {
  380.                             $chemin_src  "uploads/articles/images/".$article->getDate()->format("Y")."/".$article->getDate()->format("m")."/".$article->getDate()->format(
  381.                                     "d"
  382.                                 )."/".$article->getId()."/".$tab_dossiers[$t]."/".$image_parent->getUrl();
  383.                             $chemin_dest "uploads/articles/images/".$articleClone->getDate()->format("Y")."/".$articleClone->getDate()->format("m")."/".$articleClone->getDate()->format(
  384.                                     "d"
  385.                                 )."/".$articleClone->getId()."/".$tab_dossiers[$t]."/";
  386.                             if ( ! is_dir($chemin_dest)) {
  387.                                 mkdir($chemin_dest0755true);
  388.                                 chown($chemin_dest"www-data");
  389.                                 chgrp($chemin_dest"www-data");
  390.                                 chmod($chemin_dest0755);
  391.                             }
  392.                             exec("cp ".$chemin_src." ".$chemin_dest);
  393.                         }
  394.                     }
  395.                     $this->entityManager->flush();
  396.                 }
  397.             }
  398.             if (is_object($articleClone) && array_key_exists('copier_associes'$regles) && $regles["copier_associes"] == "1") {
  399.                 $sql  "DELETE FROM `article__article_associe` WHERE parent_id=".$id_article."";
  400.                 $stmt $this->entityManager->getConnection()->prepare($sql);
  401.                 $stmt->execute();
  402.                 if (count($article->getArticlesAssociesParent()) > 0) {
  403.                     foreach ($article->getArticlesAssociesParent() as $artAss) {
  404.                         $artAssClone = clone $artAss;
  405.                         $artAssClone->setParent($articleClone);
  406.                         $this->entityManager->persist($artAssClone);
  407.                     }
  408.                     $this->entityManager->flush();
  409.                 }
  410.             }
  411.             if (is_object($articleClone) && array_key_exists('copier_categorie'$regles) && $regles["copier_categorie"] == "1") {
  412.                 $sql  "DELETE FROM `article__article_categorie` WHERE article_id=".$id_article."";
  413.                 $stmt $this->entityManager->getConnection()->prepare($sql);
  414.                 $stmt->execute();
  415.                 if (count($article->getArticleCategorie()) > 0) {
  416.                     foreach ($article->getArticleCategorie() as $ac) {
  417.                         if (is_object($ac->getCategorie())) {
  418.                             $tableau_update_cat                 = [];
  419.                             $tableau_update_cat["categorie_id"] = $ac->getCategorie()->getId();
  420.                             $tableau_update_cat["article_id"]   = $id_article;
  421.                             $tableau_update_cat["position"]     = $ac->getPosition();
  422.                             $conn->insert('article__article_categorie'$tableau_update_cat);
  423.                         }
  424.                     }
  425.                 }
  426.             }
  427.             if (is_object($articleClone) && array_key_exists('copier_condVente'$regles) && $regles["copier_condVente"] == "1") {
  428.                 $sql  "DELETE FROM `article__condition_vente` WHERE article_id=".$id_article."";
  429.                 $stmt $this->entityManager->getConnection()->prepare($sql);
  430.                 $stmt->execute();
  431.                 $conditionsVente $repo_cond_vente->findBy(["article" => $article]);
  432.                 if (count($conditionsVente) > 0) {
  433.                     foreach ($conditionsVente as $condVente) {
  434.                         $condClone = clone $condVente;
  435.                         $condClone->setArticle($articleClone);
  436.                         $this->entityManager->persist($condClone);
  437.                     }
  438.                     $this->entityManager->flush();
  439.                 }
  440.             }
  441.             if (!= and is_object($articleClone) && array_key_exists('copier_emplacements'$regles) && $regles["copier_emplacements"] == "1") {
  442.                 if (count($article->getEmplacements()) > 0) {
  443.                     foreach ($article->getEmplacements() as $emp) {
  444.                         $empClone = clone $emp;
  445.                         $empClone->setArticle($articleClone);
  446.                         $empClone->setStock(0);
  447.                         $empClone->setStockReserve(0);
  448.                         $this->entityManager->persist($empClone);
  449.                     }
  450.                     $this->entityManager->flush();
  451.                 }
  452.             }
  453.             if (is_object($articleClone) && array_key_exists('copier_condHa'$regles) && $regles["copier_condHa"] == "1") {
  454.                 $sql  "UPDATE `article__condition_achat` SET date_supression = '".$date->format("Y-m-d H:i:s")."' WHERE article_id=".$id_article."";
  455.                 $stmt $this->entityManager->getConnection()->prepare($sql);
  456.                 $stmt->execute();
  457.                 if (count($article->getConditionsAchat()) > 0) {
  458.                     foreach ($article->getConditionsAchat() as $cond) {
  459.                         $condClone = clone $cond;
  460.                         $condClone->setArticle($articleClone);
  461.                         $this->entityManager->persist($condClone);
  462.                     }
  463.                     $this->entityManager->flush();
  464.                 }
  465.             }
  466.         }
  467.     }
  468.     public function creerDeclinaison($tab_declinaison$post$article)
  469.     {
  470.         $date            = new \Datetime();
  471.         $repo_valeurs    $this->entityManager->getRepository(ValeurAttributArticle::class);
  472.         $repo_article    $this->entityManager->getRepository(Article::class);
  473.         $repo_cond_vente $this->entityManager->getRepository(ConditionVente::class);
  474.         //echo "ARTPARENT ".$article->getId();
  475.         //print_r($tab_declinaison);
  476.         $tableau_insert = [];
  477.         $tableau_insert["libelle"]               = null;
  478.         $tableau_insert["date"]                  = $date->format("Y-m-d H:i:s");
  479.         $tableau_insert["reference"]             = null;
  480.         $tableau_insert["reference_client"]      = $article->getReferenceClient();
  481.         $tableau_insert["reference_fournisseur"] = null;
  482.         if (array_key_exists('copier_ref_fournisseur'$post) && $post["copier_ref_fournisseur"] == "1") {
  483.             $tableau_insert["reference_fournisseur"] = $article->getReferenceFournisseur();
  484.         }
  485.         $tableau_insert["prix_base"] = $article->getPrixBase();
  486.         if (is_object($article->getMarque())) {
  487.             $tableau_insert["marque_id"] = $article->getMarque()->getId();
  488.         } else {
  489.             $tableau_insert["marque_id"] = null;
  490.         }
  491.         $tableau_insert["date_supression"] = null;
  492.         $tableau_insert["date_maj"]        = $date->format("Y-m-d H:i:s");
  493.         $tableau_insert["date_maj_prix"]   = null;
  494.         $tableau_insert["description"] = null;
  495.         if (array_key_exists('copier_desc'$post) && $post["copier_desc"] == "1") {
  496.             $tableau_insert["description"] = $article->getDescription();
  497.         }
  498.         $tableau_insert["description_courte"] = null;
  499.         if (array_key_exists('copier_desc_courte'$post) && $post["copier_desc_courte"] == "1") {
  500.             $tableau_insert["description_courte"] = $article->getDescriptionCourte();
  501.         }
  502.         $tableau_insert["stock"] = 0;
  503.         $tableau_insert["largeur"]    = 0;
  504.         $tableau_insert["profondeur"] = 0;
  505.         $tableau_insert["hauteur"]    = 0;
  506.         $tableau_insert["poids"]      = 0;
  507.         if (array_key_exists('copier_dim'$post) && $post["copier_dim"] == "1") {
  508.             $tableau_insert["largeur"]    = $article->getLargeur();
  509.             $tableau_insert["profondeur"] = $article->getProfondeur();
  510.             $tableau_insert["hauteur"]    = $article->getHauteur();
  511.             $tableau_insert["poids"]      = $article->getPoids();
  512.         }
  513.         if ($article->getStatut()) {
  514.             $tableau_insert["statut"] = 1;
  515.         } else {
  516.             $tableau_insert["statut"] = 0;
  517.         }
  518.         if ($article->getAConsigner()) {
  519.             $tableau_insert["a_consigner"] = 1;
  520.         } else {
  521.             $tableau_insert["a_consigner"] = 0;
  522.         }
  523.         if ($article->getConsigne()) {
  524.             $tableau_insert["consigne"] = 1;
  525.         } else {
  526.             $tableau_insert["consigne"] = 0;
  527.         }
  528.         if ($article->getStockAuto()) {
  529.             $tableau_insert["stock_auto"] = 1;
  530.         } else {
  531.             $tableau_insert["stock_auto"] = 0;
  532.         }
  533.         if ($article->getArretGamme()) {
  534.             $tableau_insert["arret_gamme"] = 1;
  535.         } else {
  536.             $tableau_insert["arret_gamme"] = 0;
  537.         }
  538.         $tableau_insert["utilisateur_id"] = null;
  539.         if (is_object($article->getRegleTaxe())) {
  540.             $tableau_insert["regle_taxe_id"] = $article->getRegleTaxe()->getId();
  541.         } else {
  542.             $tableau_insert["regle_taxe_id"] = 1;
  543.         }
  544.         $tableau_insert["remise_max"]            = $article->getRemiseMax();
  545.         $tableau_insert["type_remise_max"]       = $article->getTypeRemiseMax();
  546.         $tableau_insert["seuil_commande_f_mini"] = $article->getSeuilMiniCommandeFournisseur();
  547.         $tableau_insert["seuil_commande_f_maxi"] = $article->getSeuilMaxiCommandeFournisseur();
  548.         $tableau_insert["niveau_un_id"]          = null;
  549.         $tableau_insert["niveau_deux_id"]        = null;
  550.         $tableau_insert["niveau_trois_id"]       = null;
  551.         $tableau_insert["niveau_quatre_id"]      = null;
  552.         $tableau_insert["pump"]                  = null;
  553.         $tableau_insert["commentaire"]           = $article->getCommentairePonctuel();
  554.         if ($article->getVirtuel()) {
  555.             $tableau_insert["virtuel"] = 1;
  556.         } else {
  557.             $tableau_insert["virtuel"] = 0;
  558.         }
  559.         $tableau_insert["prix_vente"]      = $article->getPrixVente();
  560.         $tableau_insert["taux_marge"]      = $article->getTauxMarge();
  561.         $tableau_insert["marge"]           = $article->getMarge();
  562.         $tableau_insert["marge_reelle"]    = $article->getMargeReelle();
  563.         $tableau_insert["ecotaxe"]         = $article->getEcotaxe();
  564.         $tableau_insert["conditionnement"] = $article->getConditionnement();
  565.         $tableau_insert["stock_reserve"]   = 0;
  566.         $tableau_insert["ral_fournisseur"] = 0;
  567.         if (is_object($article->getFournisseurDefaut())) {
  568.             $tableau_insert["fournisseur_defaut_id"] = $article->getFournisseurDefaut()->getId();
  569.         } else {
  570.             $tableau_insert["fournisseur_defaut_id"] = null;
  571.         }
  572.         $tableau_insert["id_import"] = null;
  573.         if ($article->getProduitInterne()) {
  574.             $tableau_insert["produit_interne"] = 1;
  575.         } else {
  576.             $tableau_insert["produit_interne"] = 0;
  577.         }
  578.         $tableau_insert["donnees_import"] = null;
  579.         if ($article->getMajPrix()) {
  580.             $tableau_insert["maj_prix"] = 1;
  581.         } else {
  582.             $tableau_insert["maj_prix"] = 0;
  583.         }
  584.         if (is_object($article->getUniteMesure())) {
  585.             $tableau_insert["unite_mesure_id"] = $article->getUniteMesure()->getId();
  586.         } else {
  587.             $tableau_insert["unite_mesure_id"] = null;
  588.         }
  589.         if ($article->getAfficherComposantPdfInterne()) {
  590.             $tableau_insert["afficher_composant_pdf_interne"] = 1;
  591.         } else {
  592.             $tableau_insert["afficher_composant_pdf_interne"] = 0;
  593.         }
  594.         if ($article->getAfficherComposantPdfExterne()) {
  595.             $tableau_insert["afficher_composant_pdf_externe"] = 1;
  596.         } else {
  597.             $tableau_insert["afficher_composant_pdf_externe"] = 0;
  598.         }
  599.         if (is_object($article->getCategorieRemiseArticle())) {
  600.             $tableau_insert["categorie_remise_article_id"] = $article->getCategorieRemiseArticle()->getId();
  601.         } else {
  602.             $tableau_insert["categorie_remise_article_id"] = null;
  603.         }
  604.         $tableau_insert["temporaire"]               = null;
  605.         $tableau_insert["libelle_secondaire"]       = $article->getLibelleSecondaire();
  606.         $tableau_insert["a_commander"]              = 0;
  607.         $tableau_insert["a_fabriquer"]              = 0;
  608.         $tableau_insert["quantite_conseillee_mini"] = $article->getQuantiteConseilleeMini();
  609.         $tableau_insert["quantite_conseillee"]      = $article->getQuantiteConseillee();
  610.         $tableau_insert["quantite_conseillee_maxi"] = $article->getQuantiteConseilleeMaxi();;
  611.         $tableau_insert["archive"]                      = 0;
  612.         $tableau_insert["coefficient_px_base_px_vente"] = $article->getCoefficientPrixBaseVente();
  613.         $tableau_insert["nom_web"]                   = null;
  614.         $tableau_insert["reference_web"]             = null;
  615.         $tableau_insert["reference_fournisseur_web"] = null;
  616.         $tableau_insert["description_web"]           = null;
  617.         $tableau_insert["resume_web"]                = null;
  618.         $tableau_insert["frais_ports_texte_web"]     = null;
  619.         $tableau_insert["message_qd_en_stock"]       = null;
  620.         $tableau_insert["article_enconsigne_id"]     = null;
  621.         $tableau_insert["reference_appel_1"]  = $article->getReferenceAppel1();
  622.         $tableau_insert["reference_appel_2"]  = $article->getReferenceAppel2();
  623.         $tableau_insert["reference_appel_3"]  = $article->getReferenceAppel3();
  624.         $tableau_insert["reference_appel_4"]  = $article->getReferenceAppel4();
  625.         $tableau_insert["reference_appel_5"]  = $article->getReferenceAppel5();
  626.         $tableau_insert["reference_appel_6"]  = $article->getReferenceAppel6();
  627.         $tableau_insert["reference_appel_7"]  = $article->getReferenceAppel7();
  628.         $tableau_insert["reference_appel_8"]  = $article->getReferenceAppel8();
  629.         $tableau_insert["reference_appel_9"]  = $article->getReferenceAppel9();
  630.         $tableau_insert["reference_appel_10"] = $article->getReferenceAppel10();
  631.         $tableau_insert["reference_appel_11"] = $tab_declinaison["reference"];
  632.         if ($article->getMainOeuvre()) {
  633.             $tableau_insert["main_oeuvre"] = 1;
  634.         } else {
  635.             $tableau_insert["main_oeuvre"] = 0;
  636.         }
  637.         $tableau_insert["stock_reserve_fabrication"] = 0;
  638.         if (is_object($article->getType())) {
  639.             $tableau_insert["type_id"] = $article->getType()->getId();
  640.         } else {
  641.             $tableau_insert["type_id"] = null;
  642.         }
  643.         if (is_object($article->getFamilleCompta())) {
  644.             $tableau_insert["famille_compta_id"] = $article->getFamilleCompta()->getId();
  645.         } else {
  646.             $tableau_insert["famille_compta_id"] = null;
  647.         }
  648.         if ($article->getPrestation()) {
  649.             $tableau_insert["prestation"] = 1;
  650.         } else {
  651.             $tableau_insert["prestation"] = 0;
  652.         }
  653.         if ($article->getNonStocke()) {
  654.             $tableau_insert["non_stocke"] = 1;
  655.         } else {
  656.             $tableau_insert["non_stocke"] = 0;
  657.         }
  658.         if ($article->getNonCommandable()) {
  659.             $tableau_insert["non_commandable"] = 1;
  660.         } else {
  661.             $tableau_insert["non_commandable"] = 0;
  662.         }
  663.         $tableau_insert["divers"]     = 0;
  664.         $tableau_insert["parent_id"]  = null;
  665.         $tableau_insert["mouvemente"] = 0;
  666.         if ($article->getNumSerieObligatoire()) {
  667.             $tableau_insert["num_serie_obligatoire"] = 1;
  668.         } else {
  669.             $tableau_insert["num_serie_obligatoire"] = 0;
  670.         }
  671.         if (is_object($article->getArticleRemplacement())) {
  672.             $tableau_insert["article_remplacement_id"] = $article->getArticleRemplacement()->getId();
  673.         } else {
  674.             $tableau_insert["article_remplacement_id"] = null;
  675.         }
  676.         if ($article->getMajPoids()) {
  677.             $tableau_insert["maj_poids"] = 1;
  678.         } else {
  679.             $tableau_insert["maj_poids"] = 0;
  680.         }
  681.         if ($article->getMajPrixBase()) {
  682.             $tableau_insert["maj_prix_base"] = 1;
  683.         } else {
  684.             $tableau_insert["maj_prix_base"] = 0;
  685.         }
  686.         $tableau_insert["cond_achat"]      = $article->getConditionnementAchat();
  687.         $tableau_insert["est_commentaire"] = 0;
  688.         $tableau_insert["seuil_critique"]  = $article->getSeuilCritique();
  689.         if (is_object($article->getRegleTaxeAchat())) {
  690.             $tableau_insert["regle_taxe_achat_id"] = $article->getRegleTaxeAchat()->getId();
  691.         } else {
  692.             $tableau_insert["regle_taxe_achat_id"] = null;
  693.         }
  694.         $tableau_insert["cpump"]          = null;
  695.         $tableau_insert["dateCalculCump"] = null;
  696.         $tableau_insert["sur_prestashop"] = null;
  697.         if ($article->getUniversel()) {
  698.             $tableau_insert["universel"] = 1;
  699.         } else {
  700.             $tableau_insert["universel"] = 0;
  701.         }
  702.         $tableau_insert["delai_reappro"]          = $article->getDelaiReappro();
  703.         $tableau_insert["title_seo_web"]          = null;
  704.         $tableau_insert["url_web"]                = null;
  705.         $tableau_insert["ean"]                    = null;
  706.         $tableau_insert["prix_revient"]           = $article->getPrixRevient();
  707.         $tableau_insert["frais_fonctionnement"]   = $article->getFraisFonctionnement();
  708.         $tableau_insert["nomenclature_douaniere"] = $article->getNomenclatureDouaniere();
  709.         $tableau_insert["unspsc"]                 = $article->getUnspsc();
  710.         $tableau_insert["a_suggerer"]             = 0;
  711.         $tableau_insert["divers_composes"]        = 0;
  712.         $tableau_insert["nomenclature_validee"]   = 0;
  713.         if (is_object($article->getTransporteur())) {
  714.             $tableau_insert["transporteur_id"] = $article->getTransporteur()->getId();
  715.         } else {
  716.             $tableau_insert["transporteur_id"] = null;
  717.         }
  718.         if (is_object($article->getAtelier())) {
  719.             $tableau_insert["atelier_id"] = $article->getAtelier()->getId();
  720.         } else {
  721.             $tableau_insert["atelier_id"] = null;
  722.         }
  723.         $tableau_insert["commentaire_dimensions"]        = $article->getCommentaireDimensions();
  724.         $tableau_insert["condition_achat_defaut_id"]     = null;
  725.         $tableau_insert["ecocontribution"]               = $article->getEcocontribution();
  726.         $tableau_insert["id_import_2"]                   = null;
  727.         $tableau_insert["article_declinaison_parent_id"] = null;
  728.         $tableau_insert["declinaison"]                   = null;
  729.         if (is_object($article->getFamilleCompta())) {
  730.             $tableau_insert['famille_compta_id'] = $article->getFamilleCompta()->getId();
  731.         }
  732.         $tableau_insert['reference']                     = $tab_declinaison["reference"];
  733.         $tableau_insert['libelle']                       = $tab_declinaison["libelle"];
  734.         $tableau_insert['article_declinaison_parent_id'] = $article->getId();
  735.         $conn $this->entityManager->getConnection();
  736.         $conn->insert('article__article'$tableau_insert);
  737.         $id_article $conn->lastInsertId();
  738.         if ($id_article != "") {
  739.             $articleClone $repo_article->find($id_article);
  740.             if (is_object($articleClone) && array_key_exists('copier_images'$post) && $post["copier_images"] == "1") {
  741.                 $repo_article_image $this->entityManager->getRepository(Image::class);
  742.                 $images_article     $repo_article_image->findBy(["article" => $article]);
  743.                 if (count($images_article) > 0) {
  744.                     foreach ($images_article as $imageArticle) {
  745.                         $image_parent = clone $imageArticle;
  746.                         $image_parent->setArticle($articleClone);
  747.                         $image_parent->setDate(new \Datetime());
  748.                         $this->entityManager->persist($image_parent);
  749.                         //$chemin_src ="uploads/articles/images/".$article->getDate()->format("Y")."/".$article->getDate()->format("m")."/".$article->getDate()->format("d")."/".$article->getId()."/*";
  750.                         //$chemin_dest ="uploads/articles/images/".$articleparent->getDate()->format("Y")."/".$articleparent->getDate()->format("m")."/".$articleparent->getDate()->format("d")."/".$articleparent->getId()."/";
  751.                         $tab_dossiers = ["large""medium""originals""small""thumbnails"];
  752.                         for ($t 0$t count($tab_dossiers); $t++) {
  753.                             $chemin_src  "uploads/articles/images/".$article->getDate()->format("Y")."/".$article->getDate()->format("m")."/".$article->getDate()->format(
  754.                                     "d"
  755.                                 )."/".$article->getId()."/".$tab_dossiers[$t]."/".$image_parent->getUrl();
  756.                             $chemin_dest "uploads/articles/images/".$articleClone->getDate()->format("Y")."/".$articleClone->getDate()->format("m")."/".$articleClone->getDate()->format(
  757.                                     "d"
  758.                                 )."/".$articleClone->getId()."/".$tab_dossiers[$t]."/";
  759.                             if ( ! is_dir($chemin_dest)) {
  760.                                 //echo "<div>CREATION</div>";
  761.                                 mkdir($chemin_dest0755true);
  762.                                 chown($chemin_dest"www-data");
  763.                                 chgrp($chemin_dest"www-data");
  764.                                 chmod($chemin_dest0755);
  765.                             }
  766.                             exec("cp ".$chemin_src." ".$chemin_dest);
  767.                         }
  768.                     }
  769.                     $this->entityManager->flush();
  770.                 }
  771.             }
  772.             if (is_object($articleClone) && array_key_exists('copier_associes'$post) && $post["copier_associes"] == "1") {
  773.                 if (count($article->getArticlesAssociesParent()) > 0) {
  774.                     foreach ($article->getArticlesAssociesParent() as $artAss) {
  775.                         $artAssClone = clone $artAss;
  776.                         $artAssClone->setParent($articleClone);
  777.                         $this->entityManager->persist($artAssClone);
  778.                     }
  779.                     $this->entityManager->flush();
  780.                 }
  781.             }
  782.             if (is_object($articleClone) && array_key_exists('copier_categorie'$post) && $post["copier_categorie"] == "1") {
  783.                 if (count($article->getArticleCategorie()) > 0) {
  784.                     foreach ($article->getArticleCategorie() as $ac) {
  785.                         if (is_object($ac->getCategorie())) {
  786.                             $tableau_insert_cat                 = [];
  787.                             $tableau_insert_cat["categorie_id"] = $ac->getCategorie()->getId();
  788.                             $tableau_insert_cat["article_id"]   = $id_article;
  789.                             $tableau_insert_cat["position"]     = $ac->getPosition();
  790.                             $conn->insert('article__article_categorie'$tableau_insert_cat);
  791.                         }
  792.                     }
  793.                 }
  794.             }
  795.             if (is_object($articleClone) && array_key_exists('copier_condVente'$post) && $post["copier_condVente"] == "1") {
  796.                 $conditionsVente $repo_cond_vente->findBy(["article" => $article]);
  797.                 if (count($conditionsVente) > 0) {
  798.                     foreach ($conditionsVente as $condVente) {
  799.                         $condClone = clone $condVente;
  800.                         $condClone->setArticle($articleClone);
  801.                         $this->entityManager->persist($condClone);
  802.                     }
  803.                     $this->entityManager->flush();
  804.                 }
  805.             }
  806.             if (is_object($articleClone) && array_key_exists('copier_emplacements'$post) && $post["copier_emplacements"] == "1") {
  807.                 if (count($article->getEmplacements()) > 0) {
  808.                     foreach ($article->getEmplacements() as $emp) {
  809.                         $empClone = clone $emp;
  810.                         $empClone->setArticle($articleClone);
  811.                         $empClone->setStock(0);
  812.                         $empClone->setStockReserve(0);
  813.                         $this->entityManager->persist($empClone);
  814.                     }
  815.                     $this->entityManager->flush();
  816.                 }
  817.             }
  818.             if (is_object($articleClone) && array_key_exists('copier_condHa'$post) && $post["copier_condHa"] == "1") {
  819.                 if (count($article->getConditionsAchat()) > 0) {
  820.                     foreach ($article->getConditionsAchat() as $cond) {
  821.                         $condClone = clone $cond;
  822.                         $condClone->setArticle($articleClone);
  823.                         $this->entityManager->persist($condClone);
  824.                     }
  825.                     $this->entityManager->flush();
  826.                 }
  827.             }
  828.             if (count($tab_declinaison["caracteritiques"]) > 0) {
  829.                 foreach ($tab_declinaison["caracteritiques"] as $declinaison) {
  830.                     $valeur_obj $repo_valeurs->find($declinaison);
  831.                     if (is_object($valeur_obj)) {
  832.                         $tableau_declinaison                               = [];
  833.                         $tableau_declinaison["article_id"]                 = $id_article;
  834.                         $tableau_declinaison["attribut_article_id"]        = $valeur_obj->getAttributArticle()->getId();
  835.                         $tableau_declinaison["valeur_attribut_article_id"] = $valeur_obj->getId();
  836.                         $conn->insert('article__declinaison'$tableau_declinaison);
  837.                     }
  838.                 }
  839.             }
  840.         }
  841.     }
  842.     public function getValeursAttribut($attribut)
  843.     {
  844.         $repo_valeurs $this->entityManager->getRepository(ValeurAttributArticle::class);
  845.         $valeurs      $repo_valeurs->findBy(["attributArticle" => $attribut]);
  846.         return $valeurs;
  847.     }
  848.     public function getDeclinaisonArticle($article)
  849.     {
  850.         $repo_declinaison $this->entityManager->getRepository(Declinaison::class);
  851.         $attributs        $repo_declinaison->findBy(["article" => $article]);
  852.         return $attributs;
  853.     }
  854.     public function getPrixLignes(Article $articleCommande $commande)
  855.     {
  856.         $repo_article_commande $this->entityManager->getRepository(ArticleCommande::class);
  857.         $lignes                $repo_article_commande->getPrixLignes($article$commande);
  858.         return $lignes;
  859.     }
  860.     public function getNombreDeLignes(Article $articleCommande $commande)
  861.     {
  862.         $repo_article_commande $this->entityManager->getRepository(ArticleCommande::class);
  863.         $total                 $repo_article_commande->getNombreDeLignes($article$commande);
  864.         return $total;
  865.     }
  866.     public function getQuantiteTotale(Article $articleCommande $commande)
  867.     {
  868.         $repo_article_commande $this->entityManager->getRepository(ArticleCommande::class);
  869.         $total                 $repo_article_commande->getQuantiteTotale($article$commande);
  870.         return $total;
  871.     }
  872.     public function qrCodeArticle(Article $article)
  873.     {
  874.         $url $this->urlGenerator->generate('dtc_article_modifier', ["id" => $article->getId()], true);
  875.         $oQRC = new QrCode();
  876.         /*$oQRC->fullName('Pierre-Henry Soria') // Add Full Name
  877.             ->nickName('PH7') // Add Nickname
  878.             ->gender('M') // Add Gender
  879.             ->email('ph7software@gmail.com') // Add Email Address
  880.             ->impp('phs_7@aol.com') // Add Instant Messenger
  881.             ->url('http://ph-7.github.com') // Add URL Website
  882.             ->note('Hello to all! I am a web developer. As hobbies I like climbing and swimming ...') // Add Note
  883.             ->categories('developer,designer,climber,swimmer') // Add Categories
  884.             ->photo('http://files.phpclasses.org/picture/user/1122955.jpg') // Add Avatar
  885.             ->lang('en-US') // Add Language
  886.             ->finish(); // End vCard
  887.         */
  888.         $oQRC
  889.             //->fullName($article->getLibelle()) // Add Full Name
  890.             //->nickName($article->getReference()) // Add Nickname
  891.             //->url($url) // Add URL Website
  892.             ->urlErp($url// Add URL Website
  893.             /*
  894.             ->gender('M') // Add Gender
  895.             ->email('ph7software@gmail.com') // Add Email Address
  896.             ->impp('phs_7@aol.com') // Add Instant Messenger
  897.             ->url('http://ph-7.github.com') // Add URL Website
  898.             ->note('Hello to all! I am a web developer. As hobbies I like climbing and swimming ...') // Add Note
  899.             ->categories('developer,designer,climber,swimmer') // Add Categories
  900.             ->photo('http://files.phpclasses.org/picture/user/1122955.jpg') // Add Avatar
  901.             ->lang('en-US') // Add Language
  902.            */
  903.             ->finish(); // End vCard
  904.         // echo '<p><img src="' . $oQRC->get(300) . '" alt="QR Code" /></p>'; // Generate and display the QR Code
  905.         return $oQRC;
  906.         //$oQRC->display(); // Display
  907.     }
  908.     public function pourcentageTraitementCalculCump(Cron $cron)
  909.     {
  910.         $pourcentage 0;
  911.         //return $pourcentage;
  912.         $nbTotalArticle $cron->getDescription();
  913.         $sql "SELECT count(*) as total
  914.                 FROM article__article
  915.                 WHERE dateCalculCump = '".$cron->getDateDebut()->format("Y-m-d H:i:s")."'
  916.                 ";
  917.         $stmt   $this->entityManager->getConnection()->prepare($sql);
  918.         $existe $stmt->executeQuery()->fetchAllAssociative();
  919.         $nbArticlesCalcule $existe[0]["total"];
  920.         if ($nbTotalArticle 0) {
  921.             $pourcentage $nbArticlesCalcule $nbTotalArticle 100;
  922.         } else {
  923.             $pourcentage 0;
  924.         }
  925.         return $pourcentage;
  926.     }
  927.     public function getConditionsAchat($id)
  928.     {
  929.         $article     $this->entityManager->getRepository(Article::class)->find($id);
  930.         $repo_condha $this->entityManager->getRepository(ConditionAchat::class);
  931.         $condHa $repo_condha->getConditionsAchatArticle($article);
  932.         return $condHa;
  933.     }
  934.     public function getLibelle($id)
  935.     {
  936.         $article $this->entityManager->getRepository(Article::class)->find($id);
  937.         return $article->getLibelle();
  938.     }
  939.     public function getRalClientArticle(Article $article)
  940.     {
  941.         $repo_article_composant $this->entityManager->getRepository(ArticleComposant::class);
  942.         $composants             $repo_article_composant->getComposantsComposeVirtuel($article)->getQuery()->getResult();
  943.         $repoCommande        $this->entityManager->getRepository(Commande::class);
  944.         $repoArticleCommande $this->entityManager->getRepository(ArticleCommande::class);
  945.         $reservations        $repoArticleCommande->getRalClientEtCmdAssociees($article$composants);
  946.         if (count($reservations) > 0) {
  947.             foreach ($reservations as $key => $r) {
  948.                 if (array_key_exists('0'$r) && array_key_exists('typeDocInitial'$r[0])) {
  949.                     $reservations[$key][0]["masque"]      = 0;
  950.                     $reservations[$key][0]["ral_calcule"] = $reservations[$key][0]["ral_quantite"];
  951.                 }
  952.                 if (array_key_exists('0'$r) && array_key_exists('typeDocInitial'$r[0]) && $r[0]["typeDocInitial"] == "2") {
  953.                     $ral_quantite $r[0]["ral_quantite"];
  954.                     $commande_id  $r[0]["commandeId"];
  955.                     $article_id   $r[0]["articleId"];
  956.                     $commande $repoCommande->find($commande_id);
  957.                     if (is_object($commande)) {
  958.                         $totalPrepare 0;
  959.                         $sql "SELECT ac.id,ac.article_commande_parent_id
  960.                             FROM commerciale__article_commande ac
  961.                                                         LEFT JOIN commerciale__commande c ON ac.commande_id = c.id
  962.                                                         LEFT JOIN commerciale__statut_commande s ON c.statut_commande_id = s.id
  963.                             WHERE ac.article_id = ".$article_id."
  964.                             AND c.id IN (".$commande_id.")
  965.                                                             AND s.ordre NOT IN (0)
  966.                             LIMIT 0,1000000000
  967.                             ";
  968.                         $stmt   $this->entityManager->getConnection()->prepare($sql);
  969.                         $existe $stmt->executeQuery()->fetchAllAssociative();
  970.                         if (count($existe) > 0) {
  971.                             for ($r 0$r count($existe); $r++) {
  972.                                 //print_r($existe);
  973.                                 $acObjet $repoArticleCommande->find($existe[$r]["id"]);
  974.                                 if (is_object($acObjet)) {
  975.                                     $totalPrepare $totalPrepare $repoArticleCommande->totalPrepare($commande$acObjet$origine "bp");
  976.                                     //echo "<div>totalPrepare BP".$totalPrepare." RAL ".$ral_quantite."</div>";
  977.                                 }
  978.                             }
  979.                         }
  980.                         //echo "<div>totalPrepare BP FINAL ".$totalPrepare." RAL ".$ral_quantite."</div>";
  981.                         if ($totalPrepare >= $ral_quantite) {
  982.                             //unset($reservations[$key]);
  983.                             $reservations[$key][0]["masque"] = 1;
  984.                             $reservations[$key][0]["masque"] = 0;
  985.                         } elseif ($totalPrepare && $totalPrepare $ral_quantite) {
  986.                             $reservations[$key][0]["ral_quantite"] = $reservations[$key][0]["quantite"];
  987.                             $reservations[$key][0]["ral_quantite"] -= $totalPrepare;
  988.                         }
  989.                     }
  990.                 } elseif (array_key_exists('0'$r) && array_key_exists('typeDocInitial'$r[0]) && $r[0]["typeDocInitial"] == "3") {
  991.                     $ral_quantite $r[0]["ral_quantite"];
  992.                     $commande_id  $r[0]["commandeId"];
  993.                     $article_id   $r[0]["articleId"];
  994.                     $commande $repoCommande->find($commande_id);
  995.                     if (is_object($commande)) {
  996.                         $sql "SELECT id,article_commande_parent_id
  997.                             FROM commerciale__article_commande
  998.                             WHERE article_id = ".$article_id."
  999.                             AND commande_id IN (SELECT id FROM commerciale__commande WHERE commande_id = ".$commande_id." AND type_document_commercial_id = ".TypeDocumentCommercial::BPATELIER." AND statut_commande_id = 26)
  1000.                             LIMIT 0,1
  1001.                             ";
  1002.                         $stmt $this->entityManager->getConnection()->prepare($sql);
  1003.                         $stmt->execute();
  1004.                         $existe $stmt->fetchAllAssociative();
  1005.                         if (count($existe) > 0) {
  1006.                             $acObjet $repoArticleCommande->find($existe[0]["id"]);
  1007.                             if (is_object($acObjet)) {
  1008.                                 $totalPrepare $repoArticleCommande->totalPrepare($commande$acObjet$origine "bpa");
  1009.                                 //echo "<div>totalPrepare ".$totalPrepare."</div>";
  1010.                                 if ($totalPrepare >= $ral_quantite) {
  1011.                                     $reservations[$key][0]["masque"] = 1;
  1012.                                     //unset($reservations[$key]);
  1013.                                 } elseif ($totalPrepare && $totalPrepare $ral_quantite) {
  1014.                                     $reservations[$key][0]["ral_quantite"] -= $totalPrepare;
  1015.                                 }
  1016.                             }
  1017.                         }
  1018.                         //echo "<div>".$sql."</div>";
  1019.                         //echo "<div>(".$key.") typeDocInitial ".$r[0]["typeDocInitial"]."</div>";
  1020.                     }
  1021.                     //totalPrepare(Commande $commande,ArticleCommande $articleCommande,$origine="bpa")
  1022.                 }
  1023.                 //print_r($reservations[$key]);
  1024.                 //    echo "<br/>**************************<br/>";
  1025.             }
  1026.         }
  1027.         return $reservations;
  1028.     }
  1029.     public function getRafArticle(Article $article)
  1030.     {
  1031.         $repoArticleCommande $this->entityManager->getRepository(ArticleCommande::class);
  1032.         $reservations        $repoArticleCommande->getReservationsFabrications($article);
  1033.         return $reservations;
  1034.     }
  1035.     public function majEquivalence($valeurs)
  1036.     {
  1037.         //print_r($valeurs);
  1038.         //echo "<div>--------</div>";
  1039.         //print_r($valeurs['articlesEquivalents']);
  1040.         //echo "<div>--------</div>";
  1041.         if (array_key_exists('articlesEquivalents'$valeurs)) {
  1042.             foreach ($valeurs['articlesEquivalents'] as $key => $value) {
  1043.                 //echo "<div>".$key."--------</div>";
  1044.                 if(!is_array($value)) {
  1045.                     $value = [$value];
  1046.                 }
  1047.                 $reciproque $value;
  1048.                 //print_r($value);
  1049.                 for ($i 0$iMax count($reciproque); $i $iMax$i++) {
  1050.                     $sql  "DELETE FROM `article_article` WHERE article_source=".$reciproque[$i]." and article_target=".$key."";
  1051.                     $stmt $this->entityManager->getConnection()->prepare($sql);
  1052.                     $stmt->execute();
  1053.                 }
  1054.             }
  1055.         }
  1056.         //echo "<div>###############</div>";
  1057.         if (array_key_exists('articles'$valeurs)) {
  1058.             for ($i 0$i count($valeurs['articles']); $i++) {
  1059.                 //echo "<div>ART : ".$valeurs['articles'][$i]."</div>";
  1060.                 $id_article $valeurs['articles'][$i];
  1061.                 $sql  "DELETE FROM `article_article` WHERE article_source=".$id_article."";
  1062.                 $stmt $this->entityManager->getConnection()->prepare($sql);
  1063.                 $stmt->executeQuery();
  1064.                 if (array_key_exists('equivalence'$valeurs)) {
  1065.                     if (array_key_exists($id_article$valeurs['equivalence'])) {
  1066.                         foreach ($valeurs['equivalence'][$id_article] as $key => $value) {
  1067.                             //echo "<div>EQUIVALENCE : ".$key."</div>";
  1068.                             $sql  "INSERT INTO `article_article` (article_source, article_target) VALUES (".$id_article.",".$key.")";
  1069.                             $stmt $this->entityManager->getConnection()->prepare($sql);
  1070.                             $stmt->executeQuery();
  1071.                         }
  1072.                     }
  1073.                 }
  1074.                 //echo "<div>--------</div>";
  1075.                 if (array_key_exists('reciproque'$valeurs)) {
  1076.                     if (array_key_exists($id_article$valeurs['reciproque'])) {
  1077.                         foreach ($valeurs['reciproque'][$id_article] as $key => $value) {
  1078.                             //echo "<div>RECIPROQUE : ".$key."</div>";
  1079.                             $sql  "SELECT count(*) as total FROM `article_article` WHERE article_source=".$key." and article_target=".$id_article."";
  1080.                             $stmt $this->entityManager->getConnection()->prepare($sql);
  1081.                             $query $stmt->executeQuery();
  1082.                             $existe $query->fetchAllAssociative();
  1083.                             if ($existe[0]['total'] == 0) {
  1084.                                 $sql  "INSERT INTO `article_article` (article_source, article_target) VALUES (".$key.",".$id_article.")";
  1085.                                 $stmt $this->entityManager->getConnection()->prepare($sql);
  1086.                                 $stmt->executeQuery();
  1087.                             }
  1088.                         }
  1089.                     }
  1090.                 }
  1091.                 // echo "<div>----------------</div>";
  1092.                 // echo "<div>----------------</div>";
  1093.             }
  1094.         }
  1095.     }
  1096.     public function estUneEquivalenceReciproque($article_equivalent$article_source)
  1097.     {
  1098.         $repo_article   $this->entityManager->getRepository(Article::class);
  1099.         $est_reciproque $repo_article->estUneEquivalenceReciproque($article_equivalent$article_source);
  1100.         return $est_reciproque;
  1101.     }
  1102.     public function getEquivalences($idArticle)
  1103.     {
  1104.         $repo_article $this->entityManager->getRepository(Article::class);
  1105.         $equivalences $repo_article->getArticleEquivalent($idArticle);
  1106.         return $equivalences;
  1107.     }
  1108.     public function getDernierPrixAchat($idArticle$date)
  1109.     {
  1110.         $repo_article $this->entityManager->getRepository(Article::class);
  1111.         $prix         $repo_article->getDernierPrixAchat($idArticle$date);
  1112.         return $prix;
  1113.     }
  1114.     public function getPrixAchat($idArticle$date)
  1115.     {
  1116.         $repo_article $this->entityManager->getRepository(Article::class);
  1117.         $prix         $repo_article->getPrixAchat($idArticle$date);
  1118.         return $prix;
  1119.     }
  1120.     public function getCump($idArticle$date)
  1121.     {
  1122.         $repo_article $this->entityManager->getRepository(MouvementStock::class);
  1123.         $mvt          $repo_article->getDernierMouvementDateHeure($idArticle$date);
  1124.         //print_r($date);
  1125.         return $mvt['cpump'];
  1126.     }
  1127.     public function getStockArticle($idArticle$date)
  1128.     {
  1129.         $repo_article $this->entityManager->getRepository(MouvementStock::class);
  1130.         $mvt          $repo_article->getDernierMouvementDateHeure($idArticle$date);
  1131.         //print_r($date);
  1132.         return floatval($mvt['stock']);
  1133.     }
  1134.     public function getCumpOuPrixCondHa($idArticle$date '')
  1135.     {
  1136.         $repo_article $this->entityManager->getRepository(MouvementStock::class);
  1137.         $mvt          $repo_article->getDernierMouvementDateHeure($idArticle$date);
  1138.         if ($mvt['cpump'] == '' || $mvt['cpump'] == || $mvt['cpump'] == '0') {
  1139.             $repo_condha $this->entityManager->getRepository(ConditionAchat::class);
  1140.             $condHa      $repo_condha->findOneBy(["article" => $idArticle"defaut" => 1]);
  1141.             if (is_object($condHa)) {
  1142.                 $prix                       $condHa->getPrixAchatNet();
  1143.                 $coefficientConditionnement $condHa->getCoefficientConditionnement();
  1144.                 if ($coefficientConditionnement != 0) {
  1145.                     $prix $prix $coefficientConditionnement;
  1146.                 }
  1147.                 $fournisseur $condHa->getFournisseur();
  1148.                 if (is_object($fournisseur)) {
  1149.                     $devise $fournisseur->getDevise();
  1150.                     if (is_object($devise)) {
  1151.                         $tauxChange $devise->getTauxChange();
  1152.                         if ($tauxChange != 0) {
  1153.                             $prix $prix $tauxChange;
  1154.                         }
  1155.                     }
  1156.                 }
  1157.                 return $prix;
  1158.             }
  1159.         }
  1160.         return $mvt['cpump'];
  1161.     }
  1162.     public function getCumpOuPrixCondHaAc($idArticle$date ''$quantite)
  1163.     {
  1164.         //$repo_article_commande = $this->em->getRepository(ArticleCommande::class);
  1165.         $repo_article $this->entityManager->getRepository(Article::class);
  1166.         //$ac = $repo_article_commande->find($idArticleCommande);
  1167.         $article       $repo_article->find($idArticle);
  1168.         $qteAfabriquer 0;
  1169.         if ($article->getStock() >= 0) {
  1170.             $qteAfabriquer $quantite $article->getStock();
  1171.         } else {
  1172.             $qteAfabriquer $quantite;
  1173.         }
  1174.         $qteAfabriquer   max(0$qteAfabriquer);
  1175.         $qteStock        $quantite $qteAfabriquer;
  1176.         $cumpStock       0;
  1177.         $cumpFabrication 0;
  1178.         $repo_article $this->entityManager->getRepository(MouvementStock::class);
  1179.         $mvt          $repo_article->getDernierMouvementDateHeure($article->getId(), $date);
  1180.         //si il n'y a pas assez de stock ou si le cump est nul, il faut recuperer le prix de la cond HA
  1181.         if ($mvt['cpump'] == '' || $mvt['cpump'] == || $mvt['cpump'] == '0' || ($qteAfabriquer 0)) {
  1182.             $repo_condha $this->entityManager->getRepository(ConditionAchat::class);
  1183.             $condHa      $repo_condha->findOneBy(["article" => $article"defaut" => 1]);
  1184.             if (is_object($condHa)) {
  1185.                 $prix                       $condHa->getPrixAchatNet();
  1186.                 $coefficientConditionnement $condHa->getCoefficientConditionnement();
  1187.                 if ($coefficientConditionnement != 0) {
  1188.                     $prix $prix $coefficientConditionnement;
  1189.                 }
  1190.                 $fournisseur $condHa->getFournisseur();
  1191.                 if (is_object($fournisseur)) {
  1192.                     $devise $fournisseur->getDevise();
  1193.                     if (is_object($devise)) {
  1194.                         $tauxChange $devise->getTauxChange();
  1195.                         if ($tauxChange != 0) {
  1196.                             $prix $prix $tauxChange;
  1197.                         }
  1198.                     }
  1199.                 }
  1200.                 //return $prix;
  1201.                 $cumpFabrication $prix;
  1202.                 $cumpStock       $prix;
  1203.             }
  1204.         } else {
  1205.             $cumpStock $mvt['cpump'];
  1206.         }
  1207.         $total = (($qteStock $cumpStock) + ($qteAfabriquer $cumpFabrication)) / $quantite;
  1208.         return $total;
  1209.     }
  1210.     public function getCumpFabrication($article$recursif false)
  1211.     {
  1212.         $total      0;
  1213.         $composants $article->getArticlesComposants();
  1214.         if (count($composants) > 0) {
  1215.             $conditionAchatParDefaut $this->getConditionAchatParDefaut($article);
  1216.             foreach ($composants as $composant) {
  1217.                 $articleTmp $composant->getArticle();
  1218.                 if ($articleTmp->getProduitInterne() == && $recursif) {
  1219.                     $valeur $this->getCumpFabrication($articleTmp$recursif);
  1220.                 } else {
  1221.                     $conditionAchatParDefautTmp "";
  1222.                     if (is_object($conditionAchatParDefaut) && $conditionAchatParDefaut->getFournisseur()->getReference() == '12000') {
  1223.                         $conditionAchatParDefautTmp $this->getConditionAchatParDefaut($articleTmp);
  1224.                     }
  1225.                     if (is_object($conditionAchatParDefautTmp)) {
  1226.                         $valeur    round($conditionAchatParDefautTmp->getPrixAchatNet(), 2);
  1227.                         $coeffCond $conditionAchatParDefautTmp->getCoefficientConditionnement();
  1228.                         if ($coeffCond != 0) {
  1229.                             $valeur $valeur $coeffCond;
  1230.                         }
  1231.                         $devise $conditionAchatParDefautTmp->getFournisseur()->getDevise();
  1232.                         if (is_object($devise) && $devise->getTauxChange() != 0) {
  1233.                             $valeur $valeur floatval($devise->getTauxChange());
  1234.                         }
  1235.                     } elseif ($articleTmp->getCpump() != 0) {
  1236.                         $valeur round(floatval($articleTmp->getCpump()), 2);
  1237.                     } else {
  1238.                         $valeur round(floatval($articleTmp->getPrixBase()), 2);
  1239.                     }
  1240.                 }
  1241.                 $total += $valeur $composant->getQuantite();
  1242.             }
  1243.         }
  1244.         //{% if composant.article.produitInterne == 1 %}
  1245.         return $total;
  1246.     }
  1247.     public function getCumpFabrication2($article$recursif false)
  1248.     {
  1249.         $total      0;
  1250.         $composants $article->getArticlesComposants();
  1251.         if (count($composants) > 0) {
  1252.             foreach ($composants as $composant) {
  1253.                 $articleTmp $composant->getArticle();
  1254.                 if ($articleTmp->getProduitInterne() == && $recursif && $articleTmp->getStock() <= 0) {
  1255.                     $valeur $this->getCumpFabrication2($articleTmp$recursif);
  1256.                 } else {
  1257.                     $valeur $this->getCumpOuPrixCondHa($articleTmp);
  1258.                 }
  1259.                 $total += $valeur $composant->getQuantite();
  1260.             }
  1261.         }
  1262.         //{% if composant.article.produitInterne == 1 %}
  1263.         return $total;
  1264.     }
  1265.     public function getCumpFabrication3($article$recursif false$quantite)
  1266.     {
  1267.         $total      0;
  1268.         $composants $article->getArticlesComposants();
  1269.         if (count($composants) > 0) {
  1270.             foreach ($composants as $composant) {
  1271.                 $articleTmp $composant->getArticle();
  1272.                 if ($articleTmp->getProduitInterne() == && $recursif && $articleTmp->getStock() < $quantite) {
  1273.                     $valeur $this->getCumpFabrication3($articleTmp$recursif$quantite);
  1274.                 } else {
  1275.                     $valeur $this->getCumpOuPrixCondHaAc($articleTmp''$quantite);
  1276.                 }
  1277.                 $total += $valeur $composant->getQuantite();
  1278.             }
  1279.         }
  1280.         //{% if composant.article.produitInterne == 1 %}
  1281.         return $total;
  1282.     }
  1283.     public function getTotalImage(Article $article)
  1284.     {
  1285.         $repo_image $this->entityManager->getRepository(Image::class);
  1286.         $total      $repo_image->getTotalImageArticle($article);
  1287.         return $total['total'];
  1288.     }
  1289.     public function getTotalDocument(Article $article)
  1290.     {
  1291.         $repo_document $this->entityManager->getRepository(Document::class);
  1292.         $total         $repo_document->getTotalDocumentArticle($article);
  1293.         return $total['total'];
  1294.     }
  1295.     public function getTotalPromos(Article $article)
  1296.     {
  1297.         $repo_prix $this->entityManager->getRepository(PrixPromo::class);
  1298.         $total     $repo_prix->getTotalPrixPromoArticle($article);
  1299.         return $total['total'];
  1300.     }
  1301.     public function getTotalVente(Article $article)
  1302.     {
  1303.         $repo_article_commande $this->entityManager->getRepository(ArticleCommande::class);
  1304.         $total                 $repo_article_commande->getTotalVenteArticle($article);
  1305.         return $total['total'];
  1306.     }
  1307.     public function getApplicationsArticle($article)
  1308.     {
  1309.         if(!is_object($article)) {
  1310.             $article $this->entityManager->getReference(Article::class, (int)$article);
  1311.         }
  1312.         $repo_application $this->entityManager->getRepository(Application::class);
  1313.         $applications  $repo_application->ApplicationsArticle($article);
  1314.         return $applications;
  1315.     }
  1316.     public function getTotalApplication(Article $article)
  1317.     {
  1318.         $repo_application $this->entityManager->getRepository(Application::class);
  1319.         $total            $repo_application->getTotalApplicationArticle($article);
  1320.         return $total['total'];
  1321.     }
  1322.     public function getTotalConditionVente(Article $article)
  1323.     {
  1324.         $repo_condition_achat $this->entityManager->getRepository(ConditionVente::class);
  1325.         $total                $repo_condition_achat->getTotalConditionVenteArticle($article);
  1326.         return $total['total'];
  1327.     }
  1328.     public function getTotalPrixDegressif(Article $article)
  1329.     {
  1330.         $repo_condition_achat $this->entityManager->getRepository(PrixDegressif::class);
  1331.         $total                $repo_condition_achat->getTotalPrixDegressifArticle($article);
  1332.         return $total['total'];
  1333.     }
  1334.     public function getTotalColis(Article $article)
  1335.     {
  1336.         $repo_colis $this->entityManager->getRepository(Colis::class);
  1337.         $total      $repo_colis->getTotalColisArticle($article);
  1338.         return $total['total'];
  1339.     }
  1340.     public function getTotalConcurrenceArticle(Article $article)
  1341.     {
  1342.         $repo_concurrence $this->entityManager->getRepository(Concurrence::class);
  1343.         $total            $repo_concurrence->getTotalConcurrenceArticle($article);
  1344.         return $total['total'];
  1345.     }
  1346.     public function getTotalConditionAchat(Article $article)
  1347.     {
  1348.         $repo_condition_achat $this->entityManager->getRepository(ConditionAchat::class);
  1349.         $total                $repo_condition_achat->getTotalConditionAchatArticle($article);
  1350.         return $total['total'];
  1351.     }
  1352.     public function getTotalTvaCommandeParTaux(Commande $commande$taux)
  1353.     {
  1354.         $repo_article_commande $this->entityManager->getRepository(ArticleCommande::class);
  1355.         $totalTva              $repo_article_commande->getTotalTvaParTaux($commande$taux);
  1356.         return $totalTva;
  1357.     }
  1358.     public function getTotalTvaCommandeParTaxe(Commande $commande$taxe)
  1359.     {
  1360.         $repo_article_commande $this->entityManager->getRepository(ArticleCommande::class);
  1361.         $totalTva              $repo_article_commande->getTotalTvaParTaxe($commande$taxe);
  1362.         return $totalTva;
  1363.     }
  1364.     public function getTotalTvaCommandeFParTaux($commande$taux)
  1365.     {
  1366.         $taux                  floatval($taux);
  1367.         $repo_article_commande $this->entityManager->getRepository(ArticleCommande::class);
  1368.         $totalTva              $repo_article_commande->getTotalTvaParTauxCF($commande$taux);
  1369.         return $totalTva;
  1370.     }
  1371.     public function getTotalBaseHTParTaux(Commande $commande$taux)
  1372.     {
  1373.         $repo_article_commande $this->entityManager->getRepository(ArticleCommande::class);
  1374.         $totalTva $repo_article_commande->getTotalBaseHTParTaux($commande$taux);
  1375.         return $totalTva;
  1376.     }
  1377.     public function getTotalBaseHTParTauxCF(CommandeFournisseur $commande$taux)
  1378.     {
  1379.         $repo_article_commande $this->entityManager->getRepository(ArticleCommande::class);
  1380.         $totalTva $repo_article_commande->getTotalBaseHTParTauxCF($commande$taux);
  1381.         return $totalTva;
  1382.     }
  1383.     public function getTva2($ac$clientId=""$adresseLivraisonId=""$adresseFacturationId="") {
  1384.         $taxe '';
  1385.         $tauxTva '';
  1386.         $client '';
  1387.         $adresseLivraison '';
  1388.         $adresseFacturation '';
  1389.         $zoneLivraison '';
  1390.         $zoneFacturation '';
  1391.         $article '';
  1392.         if(is_object($ac)){
  1393.             $taxe $ac->getTaxe();
  1394.             $tauxTva $ac->getTva();
  1395.             if(is_object($ac->getCommande()) && is_object($ac->getCommande()->getClient())) {
  1396.                 $client $ac->getCommande()->getClient();
  1397.             }
  1398.             if(is_object($ac->getCommande()) && is_object($ac->getCommande()->getAdresseLivraison())) {
  1399.                 $zoneLivraison $ac->getCommande()->getAdresseLivraison()->getZoneLivraison();
  1400.                 $adresseLivraison $ac->getCommande()->getAdresseLivraison();
  1401.             }
  1402.             if(is_object($ac->getCommande()) && is_object($ac->getCommande()->getAdresseFacturation())) {
  1403.                 $zoneFacturation $ac->getCommande()->getAdresseFacturation()->getZoneLivraison();
  1404.             }
  1405.             $article $ac->getArticle();
  1406.         } else {
  1407.             if(array_key_exists('article'$ac)) $article $ac['article'];
  1408.             if(array_key_exists('article_id'$ac)) $article $this->entityManager->getRepository('DTCArticlesBundle:Article')->find($ac['article_id']);
  1409.             if(array_key_exists('taxe_id'$ac)) $taxe $this->entityManager->getRepository(Taxe::class)->find($ac['taxe_id']);
  1410.             if(array_key_exists('tva'$ac)) $tauxTva $ac['tva'];
  1411.             if(!empty($clientId)) $client $this->entityManager->getRepository('DTCClientsBundle:Client')->find($clientId);
  1412.             if(!empty($adresseLivraisonId)){
  1413.                 $adresseLivraison $this->entityManager->getRepository('DTCAdressesBundle:Adresse')->find($adresseLivraisonId);
  1414.                 if(is_object($adresseLivraison)) $zoneLivraison $adresseLivraison->getZoneLivraison();
  1415.             }
  1416.             if(!empty($adresseFacturationId)){
  1417.                 $adresseFacturation $this->entityManager->getRepository('DTCAdressesBundle:Adresse')->find($adresseFacturationId);
  1418.                 if(is_object($adresseFacturation)) $zoneFacturation $adresseFacturation->getZoneLivraison();
  1419.             }
  1420.         }
  1421.         $array = array('id'=>'','taux'=>$tauxTva);
  1422.         if(is_object($taxe)) {
  1423.             $array['id'] = $taxe->getId();
  1424.             if($array['taux'] == ''$array['taux'] = $taxe->getTaux();
  1425.         } else {
  1426.             if ($array['taux'] != '') {
  1427.                 $taxeDefaut $this->entityManager->getRepository(Taxe::class)->findOneBy(['taux' => $array['taux']]);
  1428.             } else {
  1429.                 $taxeDefaut $this->getTaxeClientAdresses($article->getRegleTaxe(), $client$adresseLivraison$adresseFacturation);
  1430.             }
  1431.             if(is_object(($taxeDefaut))){
  1432.                 $array['id'] = $taxeDefaut->getId();
  1433.                 if ($array['taux'] == ''$array['taux'] = $taxeDefaut->getTaux();
  1434.             }
  1435.         }
  1436.         if(empty($array['id'])){
  1437.             $taxeDefaut $this->entityManager->getRepository(Taxe::class)->find(1);
  1438.             if(is_object(($taxeDefaut))){
  1439.                 $array['id'] = $taxeDefaut->getId();
  1440.                 $array['taux'] = $taxeDefaut->getTaux();
  1441.             }
  1442.         }
  1443.         return $array;
  1444.     }
  1445.     public function getTaxeClientAdresses($regleTaxe$client$adresseLivraison$adresseFacturation){
  1446.        // echo "getTaxeClientAdresses";
  1447.         if($this->entityManager->getFilters()->isEnabled('softdeleteable'))  {
  1448.             $this->entityManager->getFilters()->disable('softdeleteable');
  1449.         }
  1450.         $zoneLivraison '';
  1451.         $zoneFacturation '';
  1452.         if(is_object($adresseLivraison)) $zoneLivraison $adresseLivraison->getZoneLivraison();
  1453.         if(is_object($adresseFacturation)) $zoneFacturation $adresseFacturation->getZoneLivraison();
  1454.         $taxeDefaut $this->entityManager->getRepository(Taxe::class)->find(1);
  1455.         if(is_object($regleTaxe) && empty($regleTaxe->getTauxDefaut())){
  1456.           //  echo "AAAA";
  1457.             $taxeDefaut $this->entityManager->getRepository(Taxe::class)->find(5);
  1458.         } elseif (is_object($client) && !$client->getTva()) {
  1459.           //  echo "BBBB";
  1460.             $taxeDefaut $this->entityManager->getRepository(Taxe::class)->find(5);
  1461.         } elseif(is_object($client) && is_object($zoneLivraison) && (
  1462.                 (is_object($zoneFacturation) && $client->isSociete() && in_array($zoneFacturation->getTypeZoneLivraison(), [TypeZoneLivraison::MONDETypeZoneLivraison::DOM])
  1463.                     && in_array($zoneLivraison->getTypeZoneLivraison(), [TypeZoneLivraison::UE]))
  1464.                 || (!$client->isSociete() && in_array($zoneLivraison->getTypeZoneLivraison(), [TypeZoneLivraison::UE,TypeZoneLivraison::FR]))
  1465.                 || ($client->isSociete() && in_array($zoneLivraison->getTypeZoneLivraison(), [TypeZoneLivraison::FR]))
  1466.             )) {
  1467.          //   echo "CCC";
  1468.             //TVA PAYS
  1469.             if(is_object($adresseLivraison)){
  1470.                 //$repo_tva_pays = $this->entityManager->getRepository('DTCTaxesBundle:RegleTaxeZoneLivraison');
  1471.                 $repo_tva_pays $this->entityManager->getRepository(RegleTaxeZoneLivraison::class);
  1472.                 $pays $adresseLivraison->getZoneLivraison();
  1473.                 if(is_object($pays) && is_object($regleTaxe)){
  1474.                     $regleTaxePays $repo_tva_pays->findOneBy(array("zoneLivraison"=>$pays,"regleTaxe"=>$regleTaxe));
  1475.                     if(is_object($regleTaxePays)){
  1476.                         $taxeDefaut $regleTaxePays->getTaxe();
  1477.                     }
  1478.                 }
  1479.             }
  1480.         } elseif(is_object($client) && (
  1481.                 (is_object($zoneLivraison) && in_array($zoneLivraison->getTypeZoneLivraison(), [TypeZoneLivraison::MONDETypeZoneLivraison::DOM]))
  1482.                 || (is_object($zoneFacturation) && !in_array($zoneFacturation->getTypeZoneLivraison(), [TypeZoneLivraison::FR]) && is_object($zoneLivraison) && $client->isSociete() && in_array($zoneLivraison->getTypeZoneLivraison(), [TypeZoneLivraison::UE]))//forcer FR
  1483.             )) {
  1484.          //   echo "DDDD";
  1485.             //sans TVA
  1486.             $taxeDefaut $this->entityManager->getRepository(Taxe::class)->find(5);
  1487.         }
  1488.         $this->entityManager->getFilters()->enable('softdeleteable');
  1489.         return $taxeDefaut;
  1490.     }
  1491.     public function getTva(Article $article$facturation ''$client ''$adresse '')
  1492.     {
  1493.         $array     = ['id' => 0'taux' => 0];
  1494.         $tva       "0";
  1495.         $regleTaxe $article->getRegleTaxe();
  1496.         if (is_object($facturation)) {
  1497.         } else {
  1498.             $repo_zone     $this->entityManager->getRepository(Zone::class);
  1499.             $repo_tva_pays $this->entityManager->getRepository(RegleTaxePays::class);
  1500.             $pays          $repo_zone->find(370095);
  1501.             $tvaPays       $repo_tva_pays->findOneBy(["pays" => $pays"regleTaxe" => $regleTaxe]);
  1502.             //if(!is_object($tvaPays)) return "20";
  1503.             //if(!is_object($tvaPays->getTaxe())) return "20";
  1504.             if (is_object($tvaPays)) {
  1505.                 $taxe $tvaPays->getTaxe();
  1506.                 if (is_object($taxe)) {
  1507.                     $array['id']   = $taxe->getId();
  1508.                     $array['taux'] = $taxe->getTaux();
  1509.                 }
  1510.             }
  1511.         }
  1512.         return $array;
  1513.     }
  1514.     public function getTaxe($article ''$client ''$adresse ''$codeIso '')
  1515.     {
  1516.         //Taxe par défaut
  1517.         //$taxe = $this->em->getRepository(Taxe::class)->find(5);//taux nul
  1518.         $taxe      $this->entityManager->getRepository(Taxe::class)->find(1);//Taux standard (20%)
  1519.         $regleTaxe $this->entityManager->getRepository(RegleTaxe::class)->find(1);
  1520.         if ($codeIso != '') {
  1521.             $pays $this->entityManager->getRepository(Zone::class)->findOneBy([
  1522.                                                                                     'dateSuppression' => null,
  1523.                                                                                     'type'            => 1,
  1524.                                                                                     'codeIso'         => $codeIso,
  1525.                                                                                 ]);
  1526.             if (is_object($regleTaxe) && is_object($pays)) {
  1527.                 $tvaPays $this->entityManager->getRepository(RegleTaxePays::class)->findOneBy(["pays" => $pays"regleTaxe" => $regleTaxe]);
  1528.                 if (is_object($tvaPays) && is_object($tvaPays->getTaxe())) {
  1529.                     $taxe $tvaPays->getTaxe();
  1530.                 }
  1531.             }
  1532.         } elseif (is_object($adresse) && is_object($adresse->getPays()) && ! $adresse->getPays()->getEurope()) {
  1533.             //adresse hors UE -> pas de TVA
  1534.             $taxe $this->entityManager->getRepository(Taxe::class)->find(5);//taux nul
  1535.         //} elseif (is_object($client) && ! empty($client->getNumTva()) && $this->clientService->estPro($client) && is_object($adresse) && is_object(
  1536.         } elseif (1!=and is_object($client) && ! empty($client->getNumTva()) && $this->clientService->estPro($client) && is_object($adresse) && is_object(
  1537.                 $adresse->getPays()
  1538.             ) && $adresse->getPays()->getEurope()) {
  1539.             //client pro et adresse UE avec num de tva intracommunautaire -> pas de TVA
  1540.             $taxe $this->entityManager->getRepository(Taxe::class)->find(5);//taux nul
  1541.         } else {
  1542.             // sinon -> TVA
  1543.             // changement au 1/07/2021 -> facturation de la TVA du pays destinataire
  1544.             $pays $this->entityManager->getRepository(Zone::class)->find(370095);
  1545.             if (is_object($adresse) && is_object($adresse->getPays())) {
  1546.                 $pays $adresse->getPays();
  1547.             }
  1548.             if (is_object($article) && is_object($article->getRegleTaxe())) {
  1549.                 $regleTaxe $article->getRegleTaxe();
  1550.             }
  1551.             if (is_object($regleTaxe) && is_object($pays)) {
  1552.                 $tvaPays $this->entityManager->getRepository(RegleTaxePays::class)->findOneBy(["pays" => $pays"regleTaxe" => $regleTaxe]);
  1553.                 if (is_object($tvaPays) && is_object($tvaPays->getTaxe())) {
  1554.                     $taxe $tvaPays->getTaxe();
  1555.                 }
  1556.             }
  1557.         }
  1558.         return $taxe;
  1559.         /*
  1560.         if(is_object($taxe)) {
  1561.             $array['id'] = $taxe->getId();
  1562.             $array['taux'] = $taxe->getTaux();
  1563.         }
  1564.         return $array;
  1565.         */
  1566.     }
  1567.     public function getRemisesPossibleArticleClient($a ''$client ''$montantTotal ''$prix ''$commande '')
  1568.     {
  1569.         $remise_tampon 0;
  1570.         //getRemisesPossible($a = '', $client = '', $montantTotal = '', $prix = '', $commande = '')
  1571.         if(!is_object($a["article"])) {
  1572.             $a["article"] = $this->entityManager->getReference(Article::class, (int)$a["article"]);
  1573.             $prix $a['article']->getPrixVente();
  1574.         }
  1575.         else {
  1576.             $prix $a['article']->getPrixVente();
  1577.         }
  1578.         $remise_valeurs = ["valeur" => """type" => """remiseEnEuros" => "0""remiseId" => "","prixRemise"=>$prix];
  1579.         $liste_remise $this->getRemisesPossible($a,$client,$prix,$montantTotal,$prix,$commande);
  1580.         if (is_array($liste_remise) || is_object($liste_remise)) {
  1581.             foreach ($liste_remise as $remise) {
  1582.                 /** @var Remise $remise */
  1583.                 //echo "<div>".$remise->getId()." ".$remise->getMontant()." ".$remise->getTypeReduction()."</div>";
  1584.                 if (is_object($remise)) {
  1585.                     if ($remise->getTypeReduction() == "montant") {
  1586.                         if ($remise->getMontant() > $remise_tampon) {
  1587.                             $remise_valeurs['valeur']        = $remise->getMontant();
  1588.                             $remise_valeurs['type']          = "&euro;";
  1589.                             $remise_valeurs['remiseEnEuros'] = $remise->getMontant();
  1590.                             $remise_valeurs['remiseId']      = $remise->getId();
  1591.                             $remise_valeurs['prixRemise']      = $prix-$remise->getMontant();
  1592.                             $remise_tampon                   $remise->getMontant();
  1593.                         }
  1594.                     } elseif ($remise->getTypeReduction() == "pourcentage") {
  1595.                         $remiseEnEuros $prix $remise->getMontant() / 100;
  1596.                         if ($remiseEnEuros $remise_tampon) {
  1597.                             $prixRemise $prix - ($prix * ($remise->getMontant() / 100));
  1598.                             $remise_valeurs['valeur']        = $remise->getMontant();
  1599.                             $remise_valeurs['type']          = "%";
  1600.                             $remise_valeurs['remiseEnEuros'] = $remiseEnEuros;
  1601.                             $remise_valeurs['remiseId']      = $remise->getId();
  1602.                             $remise_valeurs['prixRemise']      = $prixRemise;
  1603.                             $remise_tampon                   $remiseEnEuros;
  1604.                         }
  1605.                     }
  1606.                 }
  1607.             }
  1608.         }
  1609.         return $remise_valeurs;
  1610.     }
  1611.     public function getRemisesPossible($a ''$client ''$montantTotal ''$prix ''$commande '')
  1612.     {
  1613.         $dateJ = new \Datetime();
  1614.         $conn  $this->entityManager->getConnection();
  1615.         if (is_object($a)) {
  1616.             $idArticle   $a->getArticle()->getId();
  1617.             $obj_article $a->getArticle();
  1618.         } else {
  1619.             $idArticle   $a['article']->getId();
  1620.             $obj_article $a['article'];
  1621.         }
  1622.         $idClient '';
  1623.         if (is_object($client)) {
  1624.             $idClient $client->getId();
  1625.         }
  1626.         $idMarque "";
  1627.         if (is_object($obj_article) and is_object($obj_article->getMarque())) {
  1628.             $idMarque $obj_article->getMarque()->getId();
  1629.         }
  1630.         $idCategRemiseArticle "";
  1631.         if (is_object($obj_article->getCategorieRemiseArticle())) {
  1632.             $idCategRemiseArticle $obj_article->getCategorieRemiseArticle()->getId();
  1633.         }
  1634.         $idCategRemiseClient "";
  1635.         if (is_object($client)) {
  1636.             foreach ($client->getcategorieRemiseClientClient() as $crcc) {
  1637.                 if (is_object($crcc->getCategorieRemiseClient())) {
  1638.                     $idCategRemiseClient .= $crcc->getCategorieRemiseClient()->getId().',';
  1639.                 }
  1640.             }
  1641.         }
  1642.         $idCategRemiseClient .= ',|';
  1643.         $idCategRemiseClient str_replace(',,|'''$idCategRemiseClient);
  1644.         $idCategRemiseClient str_replace(',|'''$idCategRemiseClient);
  1645.         $idCategArticle "";
  1646.         foreach ($obj_article->getArticleCategorie() as $ac) {
  1647.             if (is_object($ac->getCategorie())) {
  1648.                 $idCategArticle .= $ac->getCategorie()->getId().',';
  1649.             }
  1650.         }
  1651.         $idCategArticle .= ',|';
  1652.         $idCategArticle str_replace(',,|'''$idCategArticle);
  1653.         $idCategArticle str_replace(',|'''$idCategArticle);
  1654.         $idCategClient "";
  1655.         if (is_object($client)) {
  1656.             foreach ($client->getClientCategorie() as $ac) {
  1657.                 if (is_object($ac->getCategorie())) {
  1658.                     $idCategClient .= $ac->getCategorie()->getId().',';
  1659.                 }
  1660.             }
  1661.         }
  1662.         $idCategClient .= ',|';
  1663.         $idCategClient str_replace(',,|'''$idCategClient);
  1664.         $idCategClient str_replace(',|'''$idCategClient);
  1665.         //echo "<div>AC : ".$a->getId()."</div>";
  1666.         /*
  1667.         echo "<div>ART : ".$idArticle."</div>";
  1668.         echo "<div>C : ".$client->getNom()." (".$idClient.")</div>";
  1669.         echo "<div>MARQUE : ".$idMarque."</div>";
  1670.         echo "<div>ID CAT REM ARTICLE : ".$idCategRemiseArticle."</div>";
  1671.         echo "<div>ID CAT REM CLIENT : ".$idCategRemiseClient."</div>";
  1672.         echo "<div>ID CAT ARTICLE : ".$idCategArticle."</div>";
  1673.         echo "<div>ID CAT CLIENT : ".$idCategClient."</div>";
  1674.         */
  1675.         if ($idCategClient != "") {
  1676.             $sql_categ_client "
  1677.                         AND
  1678.                         (
  1679.                         r.id IN (SELECT remise_id FROM remise__remise_categorie_client m WHERE m.categorie_id IN (".$idCategClient.") AND m.dateSuppression IS NULL)
  1680.                         OR
  1681.                         r.id NOT IN (SELECT remise_id FROM remise__remise_categorie_client m WHERE m.dateSuppression IS NULL)
  1682.                         )
  1683.                         ";
  1684.         } else {
  1685.             $sql_categ_client "
  1686.                         AND
  1687.                         (
  1688.                         r.id NOT IN (SELECT remise_id FROM remise__remise_categorie_client m WHERE m.dateSuppression IS NULL)
  1689.                         )
  1690.                         ";
  1691.         }
  1692.         if ($idCategArticle != "") {
  1693.             $sql_categ_article "
  1694.                         AND
  1695.                         (
  1696.                         r.id IN (SELECT remise_id FROM remise__remise_categorie_article m WHERE m.categorie_id IN (".$idCategArticle.") AND m.dateSuppression IS NULL)
  1697.                         OR
  1698.                         r.id NOT IN (SELECT remise_id FROM remise__remise_categorie_article m WHERE m.dateSuppression IS NULL)
  1699.                         )
  1700.                         ";
  1701.         } else {
  1702.             $sql_categ_article "
  1703.                         AND
  1704.                         (
  1705.                         r.id NOT IN (SELECT remise_id FROM remise__remise_categorie_article m WHERE m.dateSuppression IS NULL)
  1706.                         )
  1707.                         ";
  1708.         }
  1709.         if ($idCategRemiseClient != "") {
  1710.             $sql_categ_remise_client "
  1711.                         AND
  1712.                         (
  1713.                         r.id IN (SELECT remise_id FROM remise__categorie_remise_client_remise m WHERE m.categorie_remise_client_id IN (".$idCategRemiseClient.") AND m.dateSuppression IS NULL)
  1714.                         OR
  1715.                         r.id NOT IN (SELECT remise_id FROM remise__categorie_remise_client_remise m WHERE m.dateSuppression IS NULL)
  1716.                         )
  1717.                         ";
  1718.         } else {
  1719.             $sql_categ_remise_client "
  1720.                         AND
  1721.                         (
  1722.                         r.id NOT IN (SELECT remise_id FROM remise__categorie_remise_client_remise m WHERE m.dateSuppression IS NULL)
  1723.                         )
  1724.                         ";
  1725.         }
  1726.         if ($idMarque != "") {
  1727.             $sql_marque "
  1728.                         AND
  1729.                         (
  1730.                         r.id IN (SELECT remise_id FROM remise__remise_marque_article m WHERE m.marque_id = '".$idMarque."' AND m.dateSuppression IS NULL)
  1731.                         OR
  1732.                         r.id NOT IN (SELECT remise_id FROM remise__remise_marque_article m WHERE m.dateSuppression IS NULL)
  1733.                         )
  1734.                         ";
  1735.         } else {
  1736.             $sql_marque "
  1737.                         AND
  1738.                         (
  1739.                         r.id NOT IN (SELECT remise_id FROM remise__remise_marque_article m WHERE m.dateSuppression IS NULL)
  1740.                         )
  1741.                         ";
  1742.         }
  1743.         if ($idCategRemiseArticle != "") {
  1744.             $sql_categ_remise_article "
  1745.                         AND
  1746.                         (
  1747.                         r.id IN (SELECT remise_id FROM remise__categorie_remise_article_remise m WHERE m.categorie_remise_article_id = '".$idCategRemiseArticle."' AND m.dateSuppression IS NULL)
  1748.                         OR
  1749.                         r.id NOT IN (SELECT remise_id FROM remise__categorie_remise_article_remise m WHERE m.dateSuppression IS NULL)
  1750.                         )
  1751.                         ";
  1752.         } else {
  1753.             $sql_categ_remise_article "
  1754.                         AND
  1755.                         (
  1756.                         r.id NOT IN (SELECT remise_id FROM remise__categorie_remise_article_remise m WHERE m.dateSuppression IS NULL)
  1757.                         )
  1758.                         ";
  1759.         }
  1760.         $sql "SELECT id,libelle
  1761.                 FROM
  1762.                 remise__remise r
  1763.                 WHERE
  1764.                 r.dateSuppression IS NULL
  1765.                 AND
  1766.                 r.statut = 1
  1767.                 AND
  1768.                 r.date_debut <= '".$dateJ->format("Y-m-d H:i:s")."'
  1769.                 AND
  1770.                 r.date_fin >= '".$dateJ->format("Y-m-d H:i:s")."'
  1771.                 AND
  1772.                 r.quantite_restante > 0
  1773.                 AND
  1774.                 r.parent_id IS NULL
  1775.                 AND
  1776.                 (r.article_id IS NULL OR r.article_id = '".$idArticle."')
  1777.                 AND
  1778.                 (r.client_id IS NULL OR r.client_id = '".$idClient."')
  1779.                 ".$sql_marque."
  1780.                 ".$sql_categ_remise_article."
  1781.                 ".$sql_categ_remise_client."
  1782.                 ".$sql_categ_article."
  1783.                 ".$sql_categ_client."
  1784.                ";
  1785.        // echo "<div style='margin-bottom : 20px;margin-top:10px;border:1px solid red;'>".$sql."</div>";
  1786.         //exit;
  1787.         //$sql = "SELECT id,nom FROM client__client WHERE id='53' or id='4181'";
  1788.         $results $conn->executeQuery($sql)->fetchAllAssociative();
  1789.         //print_r($results);
  1790.         $tab_remise  = [];
  1791.         $repo_remise $this->entityManager->getRepository(Remise::class);
  1792.         for ($i 0$i count($results); $i++) {
  1793.             //echo "<div style='margin-top:10px;'>".$results[$i]['id']." ".$results[$i]['libelle']."</div>";
  1794.             //echo "<hr/>";
  1795.             $tab_remise[] = $repo_remise->find($results[$i]['id']);
  1796.         }
  1797.         //exit;
  1798.         //print_r($tab_remise);
  1799.         return $tab_remise;
  1800.     }
  1801.     //public function getRemiseCategorieClient(Article $article,$client = '',$montantTotal='',$prix='',$commande='',$articleCommande = '') {
  1802.     public function getRemiseCategorieClient($articleCommande ''$client ''$montantTotal ''$prix ''$commande ''$enregAuto false)
  1803.     {
  1804.         $remise_valeurs = ["valeur" => """type" => """remiseEnEuros" => "0""remiseId" => ""];
  1805.         $remise_tampon 0;
  1806.         //exit;
  1807.         //$repo_remise = $this->em->getRepository('DTCRemisesBundle:RemiseCategorieClient');
  1808.         $repo_remise $this->entityManager->getRepository(Remise::class);
  1809.         if (is_object($articleCommande) && ! $enregAuto) {
  1810.             //$remise_valeurs['test'] = "OK AC";
  1811.             $remise "";
  1812.             if (is_object($articleCommande->getRemiseInitial())) {
  1813.                 //$remise = $articleCommande->getRemiseInitial();
  1814.                 $idR $articleCommande->getRemiseInitial()->getId();
  1815.                 //$idR = 996;
  1816.                 $remise $repo_remise->findOneBy(["id" => $idR]);
  1817.                 if (is_object($remise)) {
  1818.                     $liste_remise = [$remise];
  1819.                 } else {
  1820.                     $liste_remise = [];
  1821.                 }
  1822.             } else {
  1823.                 $liste_remise = [];
  1824.             }
  1825.         } else {
  1826.             //$remise_valeurs['test'] = "ERROR AC";
  1827.             //$liste_remise = $repo_remise->getRemises($client);
  1828.             //echo "PPPPPPPPPPPPPP";
  1829.             $liste_remise $this->getRemisesPossible($articleCommande$client$montantTotal$prix$commande);
  1830.         }
  1831.         if (is_array($liste_remise) || is_object($liste_remise)) {
  1832.             foreach ($liste_remise as $remise) {
  1833.                 /** @var Remise $remise */
  1834.                 //echo "<div>".$remise->getId()." ".$remise->getMontant()." ".$remise->getTypeReduction()."</div>";
  1835.                 if (is_object($remise)) {
  1836.                     if ($remise->getTypeReduction() == "montant") {
  1837.                         if ($remise->getMontant() > $remise_tampon) {
  1838.                             $remise_valeurs['valeur']        = $remise->getMontant();
  1839.                             $remise_valeurs['type']          = "&euro;";
  1840.                             $remise_valeurs['remiseEnEuros'] = $remise->getMontant();
  1841.                             $remise_valeurs['remiseId']      = $remise->getId();
  1842.                             $remise_tampon                   $remise->getMontant();
  1843.                         }
  1844.                     } elseif ($remise->getTypeReduction() == "pourcentage") {
  1845.                         $remiseEnEuros $prix $remise->getMontant() / 100;
  1846.                         if ($remiseEnEuros $remise_tampon) {
  1847.                             $remise_valeurs['valeur']        = $remise->getMontant();
  1848.                             $remise_valeurs['type']          = "%";
  1849.                             $remise_valeurs['remiseEnEuros'] = $remiseEnEuros;
  1850.                             $remise_valeurs['remiseId']      = $remise->getId();
  1851.                             $remise_tampon                   $remiseEnEuros;
  1852.                         }
  1853.                     }
  1854.                     /*
  1855.                         echo "<div style='border:1px solid red;margin:15px;'>TEMP : ".$remise_tampon." ==> ".$remiseEnEuros." PRIX ".$prix."</div>";
  1856.                         print_r($remise_valeurs);
  1857.                         echo "<br/><br/>";
  1858.                         */
  1859.                 }
  1860.             }
  1861.         }
  1862.         /*
  1863.         echo "<br/><br/>";
  1864.         print_r($remise_valeurs);
  1865.         exit;
  1866.         */
  1867.         return $remise_valeurs;
  1868.     }
  1869.     /*
  1870.         public function getStock(Article $article){
  1871.             $result = null ;
  1872.             $repoComposant = $this->em->getRepository("DTCArticlesBundle:ArticleComposant");
  1873.             $nbrcompo = $repoComposant->findBy(array('articleCompose'=>$article->getId()));
  1874.             foreach($nbrcompo as $composant){
  1875.                 if($composant->getArticle()->getVirtuel()){
  1876.                         $stock = getStock($article);
  1877.                         if($result == null and $composant->getArticle()->getNonStocke() == false and  $composant->getArticle()->getNonCommandable() == false)$result = (int)$stock ;
  1878.                         if($stock < $result and $composant->getArticle()->getNonStocke() == false and  $composant->getArticle()->getNonCommandable() == false )$result = (int)$stock   ;
  1879.                 }else{
  1880.                         $stock = $composant->getArticle()->getStock()-$composant->getArticle()->getStockReserve();
  1881.                         $stock = $stock / $composant->getQuantite();
  1882.                         if($result === null and $composant->getArticle()->getNonStocke() == false and  $composant->getArticle()->getNonCommandable() == false){
  1883.                             $result = (int)$stock ;
  1884.                         }
  1885.                         if($stock<$result and $composant->getArticle()->getNonStocke() == false and  $composant->getArticle()->getNonCommandable() == false ){
  1886.                             $result = (int)$stock   ;
  1887.                         }
  1888.                 }
  1889.             }
  1890.             if ($result == null)return 0;
  1891.             return $result;
  1892.         }
  1893.         */
  1894.     public function getStock(Article $article$avecStockReserve true)
  1895.     {
  1896.         $results = [];
  1897.         $repoComposant $this->entityManager->getRepository(ArticleComposant::class);
  1898.         $nbrcompo      $repoComposant->findBy(['articleCompose' => $article->getId()]);
  1899.         foreach ($nbrcompo as $composant) {
  1900.             if ($composant->getArticle()->getNonStocke() == false) {
  1901.                 if ($composant->getArticle()->getVirtuel()) {
  1902.                     $stock $this->getStock($composant->getArticle(), $avecStockReserve);
  1903.                 } else {
  1904.                     $stock $composant->getArticle()->getStock();
  1905.                     if ($avecStockReserve) {
  1906.                         $stock -= max(0$composant->getArticle()->getStockReserve());
  1907.                     }
  1908.                 }
  1909.                 if ( ! empty($composant->getQuantite())) {
  1910.                     $stock $stock $composant->getQuantite();
  1911.                 }
  1912.                 $stock     floor($stock);
  1913.                 $stock     max(0$stock);
  1914.                 $results[] = $stock;
  1915.             }
  1916.         }
  1917.         if (count($results)) {
  1918.             return min($results);
  1919.         } else {
  1920.             return 0;
  1921.         }
  1922.     }
  1923.     public function getPrixAchatCompose(Article $article)
  1924.     {
  1925.         $prix          0;
  1926.         $results       = [];
  1927.         $repo_article  $this->entityManager->getRepository(Article::class);
  1928.         $repoComposant $this->entityManager->getRepository(ArticleComposant::class);
  1929.         $nbrcompo      $repoComposant->findBy(['articleCompose' => $article->getId()]);
  1930.         foreach ($nbrcompo as $composant) {
  1931.             /*
  1932.                 if($composant->getArticle()->getVirtuel()){
  1933.                     $pump = $this->getPrixAchatCompose($composant->getArticle());
  1934.                 } else {
  1935.                 }
  1936.                 */
  1937.             $pump $repo_article->getPumpR($composant->getArticle()->getId());
  1938.             if ($pump == 0) {
  1939.                 $pump $this->getPrixAchatNetEuro($composant->getArticle());
  1940.             }
  1941.             if ( ! empty($composant->getQuantite())) {
  1942.                 $pump $pump $composant->getQuantite();
  1943.             }
  1944.             $prix += $pump;
  1945.         }
  1946.         return $prix;
  1947.     }
  1948.     public function getEtatStock(Article $article$quantiteCommande $commande null)
  1949.     {
  1950.         if ($commande === null) {
  1951.             $quantiteSurLaCommande 0;
  1952.         } else {
  1953.             $quantiteSurLaCommande $this->getQuantiteArticleSurCommande($article$commande);
  1954.         }
  1955.         if ($article->getNonStocke() or $article->getNonCommandable()) {
  1956.             return "1";
  1957.         }
  1958.         $couleur           "";
  1959.         $debug             "";
  1960.         $stock_disponible  floatval($article->getStock()) - floatval($article->getStockReserve());
  1961.         $stock_avec_saisie $stock_disponible $quantiteSurLaCommande floatval($quantite);
  1962.         if ($article->getVirtuel()) {
  1963.             $donnees = [];
  1964.             foreach ($article->getArticlesComposants() as $composant) {
  1965.                 $articleTmp       $composant->getArticle();
  1966.                 $quantiteTmp      $composant->getQuantite() * $quantite;
  1967.                 $result           $this->getCouleurEtatStock($articleTmp$quantiteTmp);
  1968.                 $donnees[$result] = $result;
  1969.                 $debug            .= " test_".$result;
  1970.             }
  1971.             if (array_key_exists("cmde_pduit_possible_stock_mini"$donnees)) {
  1972.                 $couleur "1";
  1973.             }
  1974.             if (array_key_exists("cmde_pduit_possible_reappro"$donnees)) {
  1975.                 $couleur "1";
  1976.             }
  1977.             if (array_key_exists("cmde_pduit_impossible"$donnees)) {
  1978.                 $couleur "0";
  1979.             }
  1980.             //$couleur .= $debug;
  1981.         } elseif (floatval($article->getStock()) <= 0) {
  1982.             $couleur "0";
  1983.         } elseif ($stock_avec_saisie 0) {
  1984.             $couleur "1";
  1985.         } else {
  1986.             if ($stock_avec_saisie $article->getSeuilCritique()) {
  1987.                 $couleur "1";
  1988.             }
  1989.         }
  1990.         if ($couleur == "") {
  1991.             $couleur "1";
  1992.         }
  1993.         return $couleur;
  1994.     }
  1995.     public function totalementPrepare($articleCommande)
  1996.     {
  1997.         $repoArticleCommande $this->entityManager->getRepository(ArticleCommande::class);
  1998.         if ( ! is_object($articleCommande)) {
  1999.             return false;
  2000.         }
  2001.         if ($articleCommande->getRalClient() == 0) {
  2002.             return true;
  2003.         }
  2004.         $total $repoArticleCommande->resteApreparer($articleCommande);
  2005.         if ($total == 0) {
  2006.             return true;
  2007.         }
  2008.         return false;
  2009.     }
  2010.     public function qteDejaPreparee($articleCommande$visualisation false)
  2011.     {
  2012.         $repoArticleCommande $this->entityManager->getRepository(ArticleCommande::class);
  2013.         if ( ! is_object($articleCommande)) {
  2014.             return 0;
  2015.         }
  2016.         if ($visualisation == true && is_object($articleCommande->getCommande()) && is_object($articleCommande->getCommande()->getTypeDocumentCommercial())) {
  2017.             $typeDoc $articleCommande->getCommande()->getTypeDocumentCommercial();
  2018.             if ($typeDoc == or $typeDoc == 11) {
  2019.                 return $articleCommande->getQuantite();
  2020.             }
  2021.         }
  2022.         if ($articleCommande->getRalClient() == 0) {
  2023.             return $articleCommande->getQuantite();
  2024.         }
  2025.         $total $repoArticleCommande->getQuantitePreparee($articleCommande);
  2026.         return $total;
  2027.     }
  2028.     public function qtePrepareeOuLivreeOuFacturee($articleCommande)
  2029.     {
  2030.         $repoArticleCommande $this->entityManager->getRepository(ArticleCommande::class);
  2031.         if ( ! is_object($articleCommande)) {
  2032.             return 0;
  2033.         }
  2034.         if ($articleCommande->getRalClient() == && $articleCommande->getQuantite() > 0) {
  2035.             return $articleCommande->getQuantite();
  2036.         }
  2037.         $total $repoArticleCommande->qtePrepareeOuLivreeOuFacturee($articleCommande);
  2038.         return $total;
  2039.     }
  2040.     public function qteDejaLivree($articleCommande)
  2041.     {
  2042.         $repoArticleCommande $this->entityManager->getRepository(ArticleCommande::class);
  2043.         if ( ! is_object($articleCommande)) {
  2044.             return 0;
  2045.         }
  2046.         if ($articleCommande->getRalClient() == && $articleCommande->getQuantite() > 0) {
  2047.             return $articleCommande->getQuantite();
  2048.         }
  2049.         $total $repoArticleCommande->getQuantiteLivree($articleCommande);
  2050.         return $total;
  2051.     }
  2052.     public function qteDejaLivree2($articleCommande)
  2053.     {
  2054.         $articleCommande $this->getArticleCommandeCommande($articleCommande);
  2055.         if (is_object($articleCommande)) {
  2056.             $ralClient $articleCommande->getRalClient();
  2057.             $quantite  $articleCommande->getQuantite();
  2058.             if ($quantite 0) {
  2059.                 $ralClient min(0$ralClient);
  2060.             } else {
  2061.                 $ralClient max(0$ralClient);
  2062.             }
  2063.             $qteDejaLivree $quantite $ralClient;
  2064.             return $qteDejaLivree;
  2065.         } else {
  2066.             return 0;
  2067.         }
  2068.     }
  2069.     private function getArticleCommandeCommande($articleCommande$count 5)
  2070.     {
  2071.         while (is_object($articleCommande)) {
  2072.             $count--;
  2073.             if ($count 0) {
  2074.                 break;
  2075.             }
  2076.             $commande $articleCommande->getCommande();
  2077.             if (is_object($commande) && is_int($commande->getTypeDocumentCommercial()) && $commande->getTypeDocumentCommercial() == TypeDocumentCommercial::COMMANDE) {
  2078.                 return $articleCommande;
  2079.             } else {
  2080.                 $articleCommande $articleCommande->getArticleCommandeParent();
  2081.             }
  2082.         }
  2083.         return $articleCommande;
  2084.     }
  2085.     public function resteApreparer($articleCommande)
  2086.     {
  2087.         $repoArticleCommande $this->entityManager->getRepository(ArticleCommande::class);
  2088.         if ( ! is_object($articleCommande)) {
  2089.             return $articleCommande['quantite'];
  2090.         }
  2091.         if ($articleCommande->getRalClient() == 0) {
  2092.             return 0;
  2093.         }
  2094.         $total $repoArticleCommande->resteApreparer($articleCommande);
  2095.         return $total;
  2096.     }
  2097.     public function getCouleurEtatStock(Article $article$quantiteCommande $commande null)
  2098.     {
  2099.         if ($commande === null) {
  2100.             $quantiteSurLaCommande 0;
  2101.         } else {
  2102.             $quantiteSurLaCommande $this->getQuantiteArticleSurCommande($article$commande);
  2103.         }
  2104.         $couleur "success";
  2105.         if ($article->getNonStocke() or $article->getNonCommandable()) {
  2106.             return $couleur;
  2107.         }
  2108.         $debug            "";
  2109.         $stock_disponible floatval($article->getStock()) - floatval($article->getStockReserve());
  2110.         $stock_disponible += $this->getRalFournisseur($articletrue);
  2111.         //$stock_disponible_avant_commande = floatval($article->getStock()) - floatval($article->getStockReserve());
  2112.         //$stock_disponible = $stock_disponible - floatval($quantite);
  2113.         $stock_avec_saisie $stock_disponible $quantiteSurLaCommande floatval($quantite);
  2114.         if ($article->getVirtuel()) {
  2115.             $donnees = [];
  2116.             foreach ($article->getArticlesComposants() as $composant) {
  2117.                 $articleTmp       $composant->getArticle();
  2118.                 $quantiteTmp      $composant->getQuantite() * $quantite;
  2119.                 $result           $this->getCouleurEtatStock($articleTmp$quantiteTmp);
  2120.                 $donnees[$result] = $result;
  2121.                 $debug            .= " test_".$result;
  2122.             }
  2123.             if (array_key_exists("cmde_pduit_possible_stock_mini"$donnees)) {
  2124.                 $couleur "cmde_pduit_possible_stock_mini";
  2125.             }
  2126.             if (array_key_exists("cmde_pduit_possible_reappro"$donnees)) {
  2127.                 $couleur "cmde_pduit_possible_reappro";
  2128.             }
  2129.             if (array_key_exists("cmde_pduit_impossible"$donnees)) {
  2130.                 $couleur "cmde_pduit_impossible";
  2131.             }
  2132.             $couleur .= $debug;
  2133.         } /*
  2134.         elseif($stock_disponible_avant_commande == 0) $couleur = "cmde_pduit_possible_reappro";
  2135.         else if($stock_disponible < 0) $couleur = "cmde_pduit_impossible";
  2136.         else if($stock_disponible_avant_commande < $quantite ) $couleur = "cmde_pduit_possible_reappro";
  2137.         else {
  2138.             $nouveauStock = $stock_disponible_avant_commande - $quantite;
  2139.             //echo $nouveauStock." ".$article->getSeuilMiniCommandeFournisseur();
  2140.             if($nouveauStock < $article->getSeuilMiniCommandeFournisseur()) $couleur = "cmde_pduit_possible_stock_mini";
  2141.         }
  2142.                  *
  2143.                  */
  2144.         elseif (floatval($article->getStock()) <= 0) {
  2145.             $couleur "cmde_pduit_impossible";
  2146.         } //elseif ($stock_disponible <= 0) $couleur = "cmde_pduit_impossible";
  2147.         elseif ($stock_avec_saisie 0) {
  2148.             $couleur "cmde_pduit_possible_reappro";
  2149.         } else {
  2150.             //if($stock_avec_saisie < $article->getSeuilMiniCommandeFournisseur()) $couleur = "cmde_pduit_possible_stock_mini";
  2151.             if ($stock_avec_saisie $article->getSeuilCritique()) {
  2152.                 //echo "OKOKA ".$stock_avec_saisie." ".$article->getSeuilCritique();
  2153.                 //$couleur = "cmde_pduit_possible_stock_mini";
  2154.                 $couleur "cmde_pduit_possible_stock_critique";
  2155.             }
  2156.         }
  2157.         //echo $couleur;
  2158.         //Article
  2159.         return $couleur;
  2160.     }
  2161.     public function getQuantiteArticleSurCommande(Article $articleCommande $commande)
  2162.     {
  2163.         $repo   $this->entityManager->getRepository(ArticleCommande::class);
  2164.         $retour $repo->getQuantiteArticleSurCommande($article$commande);
  2165.         return $retour;
  2166.     }
  2167.     public function getCouleurQteF2($articleCommande)
  2168.     {
  2169.         $couleur "";
  2170.         if ($articleCommande->getQuantite() < $articleCommande->getConditionAchat()->getQuantite()) {
  2171.             $couleur 'warning';
  2172.         }
  2173.         $retour $this->getQteConseillee($articleCommande->getArticle(), $articleCommande->getConditionAchat());
  2174.         if ($articleCommande->getQuantite() < $retour['qteMini']) {
  2175.             $couleur 'danger';
  2176.         }
  2177.         return $couleur;
  2178.     }
  2179.     public function getCouleurQteF(Article $article$quantite$fournisseur null)
  2180.     {
  2181.         $couleur "";
  2182.         $retour  $this->getQteConseillee($article);
  2183.         /*
  2184.             if ($article->getSeuilMaxiCommandeFournisseur() != '' && $retour['qteMaxi'] != '' && ($quantite > $article->getSeuilMaxiCommandeFournisseur() || $quantite > $retour['qteMaxi']))
  2185.                 $couleur = 'warning';
  2186.              *
  2187.              */
  2188.         //Conditions Achat
  2189.         if ($fournisseur != null) {
  2190.             $repoConditionsAchat $this->entityManager->getRepository(ConditionAchat::class);
  2191.             $conditions          $repoConditionsAchat->findBy(['article' => $article->getId(), 'fournisseur' => $fournisseur]);
  2192.         } else {
  2193.             $conditions $article->getConditionsAchat();
  2194.         }
  2195.         foreach ($conditions as $condition) {
  2196.             if ($quantite $condition->getQuantite()) {
  2197.                 $couleur 'warning';
  2198.             }
  2199.             /*
  2200.                     if($condition->getConditionnement() > 1){
  2201.                         $modulo = $quantite % $condition->getConditionnement();
  2202.                         if ($quantite > $condition->getQuantite() && $modulo != 0){
  2203.                             $couleur = 'danger';
  2204.                             return $couleur;
  2205.                         }
  2206.                     }
  2207.                      *
  2208.                      */
  2209.         }
  2210.         if ($quantite $retour['qteMini']) {
  2211.             $couleur 'danger';
  2212.         }
  2213.         //if ($quantite < $article->getSeuilMiniCommandeFournisseur() || $quantite < $retour['qteMini'])
  2214.         //$couleur = 'couleur'.$retour['qteMini'];
  2215.         return $couleur;
  2216.     }
  2217.     public function sauvegarder($article$categories)
  2218.     {
  2219.         $repo_categorie         $this->entityManager->getRepository(Categorie::class);
  2220.         $repo_article_categorie $this->entityManager->getRepository(ArticleCategorie::class);
  2221.         $articleCategorie       $article->getArticleCategorie();
  2222.         foreach ($articleCategorie as $ac) {
  2223.             if ( ! in_array($ac->getCategorie()->getId(), $categories)) {
  2224.                 $this->entityManager->remove($ac);
  2225.             }
  2226.         }
  2227.         for ($i 0$i count($categories); $i++) {
  2228.             $c $repo_categorie->find($categories[$i]);
  2229.             if (is_object($c)) {
  2230.                 $relation $repo_article_categorie->findOneBy(['article' => $article'categorie' => $c]);
  2231.                 if ( ! is_object($relation)) {
  2232.                     $objet = new ArticleCategorie();
  2233.                     $objet->setCategorie($c);
  2234.                     $objet->setArticle($article);
  2235.                     $this->entityManager->persist($objet);
  2236.                 }
  2237.             }
  2238.         }
  2239.         $this->entityManager->flush();
  2240.     }
  2241.     public function setFournisseurDefaut(Article $article)
  2242.     {
  2243.         $fournisseur '';
  2244.         /*
  2245.             $conditionsAchat = $article->getConditionsAchat();
  2246.             //Le fournisseur de la condition d'achat par defaut
  2247.             foreach($conditionsAchat as $conditionAchat)
  2248.             {
  2249.                 if ($conditionAchat->getDefaut() == true)
  2250.                     $fournisseur = $conditionAchat->getFournisseur();
  2251.             }
  2252.             */
  2253.         $qteConseillee $this->getQteConseillee($article);
  2254.         if ( ! empty($qteConseillee['condition']) && is_object($qteConseillee['condition'])) {
  2255.             $fournisseur $qteConseillee['condition']->getFournisseur();
  2256.         }
  2257.         //Le fournisseur de la premiere condition d'achat ayant un fournisseur
  2258.         if ( ! is_object($fournisseur) && isset($conditionAchat)) {
  2259.             foreach ($conditionsAchat as $conditionAchat) {
  2260.                 if ( ! is_object($fournisseur)) {
  2261.                     $fournisseur $conditionAchat->getFournisseur();
  2262.                 }
  2263.             }
  2264.         }
  2265.         //Le fournisseur du dernier achat.
  2266.         if ( ! is_object($fournisseur)) {
  2267.             $mvtStock $this->entityManager->getRepository(MouvementStock::class)->findOneBy(
  2268.                   [
  2269.                       'article'              => $article->getId(),
  2270.                       'raisonMouvementStock' => 3,
  2271.                   ]
  2272.                 , ['date' => 'DESC']
  2273.             );
  2274.             if (is_object($mvtStock)) {
  2275.                 $fournisseur $mvtStock->getFournisseur();
  2276.             }
  2277.         }
  2278.         if (is_object($fournisseur)) {
  2279.             $article->setFournisseurDefaut($fournisseur);
  2280.             $this->entityManager->persist($article);
  2281.             $this->entityManager->flush();
  2282.         }
  2283.     }
  2284. //}
  2285.     public function getQteConseillee($articleConditionAchat $condition nullFournisseur $fournisseur null)
  2286.     {
  2287.         $qteConseillee 1;
  2288.         $qteMini       1;
  2289.         $qteMaxi       false;
  2290.         //$qteMini = abs($article->getStock()-$article->getStockReserve()+$article->getRalFournisseur());
  2291.         $stockVirtuel $article->getStock() - $article->getStockReserve() + $article->getRalFournisseur();
  2292.         if ($stockVirtuel 0) {
  2293.             $qteMini abs($stockVirtuel);
  2294.         }
  2295.         if ($article->getSeuilMiniCommandeFournisseur() >= 0) {
  2296.             $qteMini $article->getSeuilMiniCommandeFournisseur() - $stockVirtuel;
  2297.         }
  2298.         if ($article->getSeuilMaxiCommandeFournisseur() > 0) {
  2299.             $qteMaxi true;
  2300.             //$qteConseillee = $article->getSeuilMaxiCommandeFournisseur()+$qteMini;
  2301.             $qteConseillee $article->getSeuilMaxiCommandeFournisseur() - $stockVirtuel;
  2302.         } elseif ($article->getSeuilMiniCommandeFournisseur() >= 0) {
  2303.             //$qteConseillee = $article->getSeuilMiniCommandeFournisseur()+$qteMini;
  2304.             $qteConseillee $article->getSeuilMiniCommandeFournisseur() - $stockVirtuel;
  2305.         } elseif ($stockVirtuel 0) {
  2306.             $qteConseillee abs($stockVirtuel);
  2307.         }
  2308.         if ($qteConseillee 0) {
  2309.             $qteConseillee 1;
  2310.         }
  2311.         if ($qteMini 0) {
  2312.             $qteMini 1;
  2313.         }
  2314.         if ( ! is_object($condition)) {
  2315.             $variables = [
  2316.                 'article' => $article->getId(),
  2317.                 'defaut'  => true,
  2318.             ];
  2319.             if (is_object($fournisseur)) {
  2320.                 $variables['fournisseur'] = $fournisseur;
  2321.             }
  2322.             $condition $this->entityManager->getRepository(ConditionAchat::class)->findOneBy($variables);
  2323.         }
  2324.         if ( ! is_object($condition)) {
  2325.             $variables = [
  2326.                 'article' => $article->getId(),
  2327.             ];
  2328.             if (is_object($fournisseur)) {
  2329.                 $variables['fournisseur'] = $fournisseur;
  2330.             }
  2331.             $conditions $this->entityManager->getRepository(ConditionAchat::class)->findBy(
  2332.                 $variables,
  2333.                 ['prixAchatNet' => 'ASC'],
  2334.                 1,
  2335.                 0
  2336.             );
  2337.             if (count($conditions)) {
  2338.                 $condition $conditions[0];
  2339.             }
  2340.         }
  2341.         if (is_object($condition)) {
  2342.             $quantiteMini    $condition->getQuantite();
  2343.             $qteMini         max($quantiteMini$qteMini);
  2344.             $qteConseillee   ceil(max($quantiteMini$qteConseillee));
  2345.             $conditionnement $condition->getConditionnement();
  2346.             if ($conditionnement != 0) {
  2347.                 if ($qteConseillee $conditionnement) {
  2348.                     $qteConseillee $conditionnement;
  2349.                 } elseif ($qteConseillee $conditionnement != 0) {
  2350.                     $qteConseillee ceil($qteConseillee $conditionnement) * $conditionnement;
  2351.                 }
  2352.             }
  2353.             $retour['condition'] = $condition;
  2354.         }
  2355.         $retour['qteConseillee'] = $qteConseillee;
  2356.         $retour['qteMini']       = $qteMini;
  2357.         $retour['qteMaxi']       = $qteMaxi;
  2358.         //print_r($retour);
  2359.         return $retour;
  2360.     }
  2361.     public function majQteConseillee($articleConditionAchat $condition null)
  2362.     {
  2363.         //quantite_conseillee_mini quantite_conseillee quantite_conseillee_maxi
  2364.         $tableau_donnee = [];
  2365.         $retour $this->getQteConseillee($article$condition);
  2366.         if ($article->getQuantiteConseillee() != $retour['qteConseillee']) {
  2367.             //$article->setQuantiteConseillee($retour['qteConseillee']);
  2368.             $tableau_donnee["quantite_conseillee"] = $retour['qteConseillee'];
  2369.         }
  2370.         if ($article->getQuantiteConseilleeMini() != $retour['qteMini']) {
  2371.             //$article->setQuantiteConseilleeMini($retour['qteMini']);
  2372.             $tableau_donnee["quantite_conseillee_mini"] = $retour['qteMini'];
  2373.         }
  2374.         if ( ! in_array($retour['qteMaxi'], [truefalse]) && $article->getQuantiteConseilleeMaxi() != $retour['qteMaxi']) {
  2375.             //$article->setQuantiteConseilleeMaxi($retour['qteMaxi']);
  2376.             $tableau_donnee["quantite_conseillee_maxi"] = $retour['qteMaxi'];
  2377.         }
  2378.         if ( ! empty($retour['condition']) && is_object($retour['condition']) && is_object($retour['condition']->getFournisseur())) {
  2379.             $tableau_donnee["fournisseur_defaut_id"]     = $retour['condition']->getFournisseur()->getId();
  2380.             $tableau_donnee["condition_achat_defaut_id"] = $retour['condition']->getId();
  2381.         }
  2382.         if (count($tableau_donnee) > 0) {
  2383.             $conn $this->entityManager->getConnection();
  2384.             $conn->update('article__article'$tableau_donnee, ['id' => $article->getId()]);
  2385.         }
  2386.         //$this->em->persist($article);
  2387.         //$this->em->flush();
  2388.     }
  2389.     public function ___majQteConseillee($articleConditionAchat $condition null)
  2390.     {
  2391.         /*
  2392.         $qteConseillee = 1;
  2393.         $qteMini = 1;
  2394.         //$qteMini = abs($article->getStock()-$article->getStockReserve()+$article->getRalFournisseur());
  2395.         $stockVirtuel = $article->getStock()-$article->getStockReserve()+$article->getRalFournisseur();
  2396.         if($stockVirtuel < 0) $qteMini = abs($stockVirtuel);
  2397.             if($article->getSeuilMaxiCommandeFournisseur() > 0) {
  2398.                 $qteMaxi = true;
  2399.                 //$qteConseillee = $article->getSeuilMaxiCommandeFournisseur()+$qteMini;
  2400.                 $qteConseillee = $article->getSeuilMaxiCommandeFournisseur()-$stockVirtuel;
  2401.             } else if($article->getSeuilMiniCommandeFournisseur() >= 0){
  2402.                 //$qteConseillee = $article->getSeuilMiniCommandeFournisseur()+$qteMini;
  2403.                 $qteConseillee = $article->getSeuilMiniCommandeFournisseur()-$stockVirtuel;
  2404.                 $qteMaxi = false;
  2405.             } else if($stockVirtuel < 0) {
  2406.                 $qteConseillee = abs($stockVirtuel);
  2407.             }
  2408.         if($qteConseillee < 0) $qteConseillee = 0;
  2409.         if (is_object($condition)){
  2410.             $quantiteMini = $condition->getQuantite();
  2411.             $quantiteConditionnement = $condition->getConditionnement();
  2412.             $quantiteR = max($quantiteMini, $qteConseillee);
  2413.             $qteConseillee = ceil($quantiteR/$quantiteConditionnement)*$quantiteConditionnement;
  2414.             $qteMini = max($quantiteMini, $quantiteConditionnement, $qteMini);
  2415.         }
  2416.          *
  2417.          */
  2418.         $retour $this->getQteConseillee($article$condition);
  2419.         if ($article->getQuantiteConseillee() != $retour['qteConseillee']) {
  2420.             $article->setQuantiteConseillee($retour['qteConseillee']);
  2421.         }
  2422.         if ($article->getQuantiteConseilleeMini() != $retour['qteMini']) {
  2423.             $article->setQuantiteConseilleeMini($retour['qteMini']);
  2424.         }
  2425.         if ($article->getQuantiteConseilleeMaxi() != $retour['qteMaxi']) {
  2426.             $article->setQuantiteConseilleeMaxi($retour['qteMaxi']);
  2427.         }
  2428.         $this->entityManager->persist($article);
  2429.         $this->entityManager->flush();
  2430.     }
  2431.     public function _majQteConseillee($articleConditionAchat $condition null)
  2432.     {
  2433.         $qteConseillee 0;
  2434.         $qteMini       abs($article->getStock() - $article->getStockReserve() + $article->getRalFournisseur());
  2435.         if ($article->getSeuilMaxiCommandeFournisseur() > 0) {
  2436.             $qteMaxi       true;
  2437.             $qteConseillee $article->getSeuilMaxiCommandeFournisseur() + $qteMini;
  2438.         } elseif ($article->getSeuilMiniCommandeFournisseur() >= 0) {
  2439.             $qteConseillee $article->getSeuilMiniCommandeFournisseur() + $qteMini;
  2440.             $qteMaxi       false;
  2441.         } else {
  2442.             $qteConseillee $qteMini;
  2443.         }
  2444.         if (is_object($condition)) {
  2445.             $quantiteMini            $condition->getQuantite();
  2446.             $quantiteConditionnement $condition->getConditionnement();
  2447.             $quantiteR               max($quantiteMini$qteConseillee);
  2448.             $qteConseillee           ceil($quantiteR $quantiteConditionnement) * $quantiteConditionnement;
  2449.             $qteMini                 max($quantiteMini$quantiteConditionnement$qteMini);
  2450.         }
  2451.         $article->setQuantiteConseillee($qteConseillee);
  2452.         $article->setQuantiteConseilleeMini($qteMini);
  2453.         $article->setQuantiteConseilleeMaxi($qteMaxi);
  2454.         $this->entityManager->persist($article);
  2455.         $this->entityManager->flush();
  2456.     }
  2457.     public function majQteConseilleeApresImport()
  2458.     {
  2459.         $repoArticle $this->entityManager->getRepository(Article::class);
  2460.         $repoArticle->updateACommander();
  2461.         $articlesAmaj $repoArticle->findByACommander(true);
  2462.         foreach ($articlesAmaj as $article) {
  2463.             $this->majQteConseillee($article);
  2464.         }
  2465.     }
  2466.     public function getArticlesComposantsAvecArborescence(Article $article$retour$quantite 1)
  2467.     {
  2468.         $articlesComposants $article->getArticlesComposants();
  2469.         $quantiteComposant  $article->getStockReserve();
  2470.         foreach ($articlesComposants as $articleComposant) {
  2471.             $quantiteComposant $articleComposant->getQuantite() * $quantite;
  2472.             $ssArticle         $articleComposant->getArticle();
  2473.             if (count($ssArticle->getArticlesComposants()) > 0) {
  2474.                 $retour2                     "";
  2475.                 $retour2                     $this->getArticlesComposantsAvecArborescence($ssArticle$retour2$quantiteComposant);
  2476.                 $retour[$ssArticle->getId()] = [$articleComposant$retour2];
  2477.             } else {
  2478.                 $articleComposant->setQuantite($quantiteComposant);
  2479.                 $retour[$ssArticle->getId()] = $articleComposant;
  2480.             }
  2481.         }
  2482.         return $retour;
  2483.     }
  2484.     public function majClientsEnRal(Article $article)
  2485.     {
  2486.         //Supprimer tous les liasons clients
  2487.         /*foreach($article->getClientsEnRal() as $client){
  2488.             $article->removeClientsEnRal($client);
  2489.         }*/
  2490.         $conn $this->entityManager->getConnection();
  2491.         $sql  "DELETE FROM `article_client` WHERE article_id = ".$article->getId()."";
  2492.         $stmt $conn->prepare($sql);
  2493.         $stmt->execute();
  2494.         //echo "<div>sql : ".$sql."</div>";
  2495.         //exit;
  2496.         $repoArticle $this->entityManager->getRepository(Article::class);
  2497.         $clients     $repoArticle->getClientsEnRal($article);
  2498.         //Ajouter les clients
  2499.         $repoClient $this->entityManager->getRepository(Client::class);
  2500.         foreach ($clients as $client) {
  2501.             //echo "<div>client : ".$client['id']."</div>";
  2502.             //$client = $repoClient->find($client['id']);
  2503.             //$article->addClientsEnRal($client);
  2504.             $tableau_donnee               = [];
  2505.             $tableau_donnee["client_id"]  = $client['id'];
  2506.             $tableau_donnee["article_id"] = $article->getId();
  2507.             $conn->insert('article_client'$tableau_donnee);
  2508.         }
  2509.         //$this->em->persist($article);
  2510.         //$this->em->flush();
  2511.         //exit;
  2512.     }
  2513.     public function ____majClientsEnRal(Article $article)
  2514.     {
  2515.         //Supprimer tous les liasons clients
  2516.         foreach ($article->getClientsEnRal() as $client) {
  2517.             $article->removeClientsEnRal($client);
  2518.         }
  2519.         $repoArticle $this->entityManager->getRepository(Article::class);
  2520.         $clients     $repoArticle->getClientsEnRal($article);
  2521.         //Ajouter les clients
  2522.         $repoClient $this->entityManager->getRepository(Client::class);
  2523.         foreach ($clients as $client) {
  2524.             $client $repoClient->find($client['id']);
  2525.             $article->addClientsEnRal($client);
  2526.         }
  2527.         $this->entityManager->persist($article);
  2528.         $this->entityManager->flush();
  2529.     }
  2530.     public function modifierStockComposants(Article $composeArticleCommande $ac$variation$raisonMvtStock 1Commande $commande null)
  2531.     {
  2532.         $composants $compose->getArticlesComposants();
  2533.         $repo_raison_mvt_stck $this->entityManager->getRepository(RaisonMouvementStock::class);
  2534.         $repo_emplacement     $this->entityManager->getRepository(Emplacement::class);
  2535.         if ( ! is_object($commande)) {
  2536.             $commande $ac->getCommande();
  2537.         }
  2538.         foreach ($composants as $articleComposant) {
  2539.             $article $articleComposant->getArticle();
  2540.             //echo "<div>COMPOSANT : ".$article->getId()."  VAR(".$variation.") QTE (".floatval($articleComposant->getQuantite()).")</div>";
  2541.             $test        "<div>COMPOSANT : ".$article->getId()."  VAR(".$variation.") QTE (".floatval($articleComposant->getQuantite()).")</div>";
  2542.             $quantiteTmp $variation floatval($articleComposant->getQuantite());
  2543.             if ($article->getVirtuel() == true && $article->getProduitInterne() == true) {
  2544.                 //echo "<div>COMPOSANT COMPOSE: ".$article->getId()."</div>";
  2545.                 $this->modifierStockComposants($article$ac$quantiteTmp$raisonMvtStock$commande);
  2546.             } else {
  2547.                 //Creer un mouvement de stock
  2548.                 $mvtStock = new MouvementStock;
  2549.                 $mvtStock->setArticle($article);
  2550.                 $mvtStock->setArticleCommandeVirtuel($ac);
  2551.                 if (is_object($commande)) {
  2552.                     $mvtStock->setCommandeVirtuel($commande);
  2553.                 }
  2554.                 $mvtStock->setQuantite($quantiteTmp);
  2555.                 if ($raisonMvtStock != '') {
  2556.                     $raisonMouvementStock $repo_raison_mvt_stck->find($raisonMvtStock);
  2557.                     if (is_object($raisonMouvementStock)) {
  2558.                         $mvtStock->setRaisonMouvementStock($raisonMouvementStock);
  2559.                     }
  2560.                     if (is_object($raisonMouvementStock) and ($raisonMouvementStock->getId() == 11 or $raisonMouvementStock->getId() == 12)) {
  2561.                         $quantiteTmp "-".$quantiteTmp;
  2562.                         $quantiteTmp str_replace("--"""$quantiteTmp);
  2563.                         $mvtStock->setQuantite($quantiteTmp);
  2564.                     }
  2565.                 }
  2566.                 $mvtStock->setCommande($ac->getCommande());
  2567.                 $mvtStock->setEstUnComposant(true);
  2568.                 //$mvtStock->setCommentaire("modifierStockComposants ".$test);
  2569.                 /*
  2570.                 $nbEmplacement = count($article->getEmplacements());
  2571.                 //echo "<div>NB E ".$nbEmplacement."</div>";
  2572.                 if($nbEmplacement > 0) {
  2573.                     $compteur = 0;
  2574.                     foreach($article->getEmplacements() as $e) {
  2575.                         //echo "<div>".$e->getLibelle()." cpt : ".$compteur."</div>";
  2576.                         if($compteur == 0) {
  2577.                             $mvtStock->setEmplacement($e);
  2578.                         }
  2579.                         $compteur++;
  2580.                     }
  2581.                 }
  2582.                                          *
  2583.                                          */
  2584.                 //emplacement par défaut
  2585.                 $emplacementPardefaut $repo_emplacement->findOneBy(['article' => $article->getId(), 'defaut' => true'visibilite' => true]);
  2586.                 if ( ! is_object($emplacementPardefaut)) {
  2587.                     $emplacementPardefaut $repo_emplacement->findOneBy(['article' => $article->getId(), 'visibilite' => true]);
  2588.                 }
  2589.                 if (is_object($emplacementPardefaut)) {
  2590.                     $mvtStock->setEmplacement($emplacementPardefaut);
  2591.                 }
  2592.                 $this->entityManager->persist($ac);
  2593.                 $this->entityManager->persist($mvtStock);
  2594.                 $this->mouvementStockService->sauvegarder($mvtStock$article);
  2595.                 /*
  2596.                 $stock = floatval($articleComposant->getArticle()->getStock())+$quantiteTmp;
  2597.                 $articleComposant->setStock($stock);
  2598.                 $this->em->persist($articleComposant);
  2599.                  *
  2600.                  */
  2601.             }
  2602.         }
  2603.         $this->entityManager->flush();
  2604.     }
  2605.     //if($article->getVirtuel() == true or $article->getNonStocke() == true or $article->getNonCommandable() == true or $article->getMainOeuvre() == true){
  2606.     public function modifierStockReserveComposants(Article $compose$variation)
  2607.     {
  2608.         $repo_emplacement $this->entityManager->getRepository(Emplacement::class);
  2609.         $composants       $compose->getArticlesComposants();
  2610.         foreach ($composants as $articleComposant) {
  2611.             $quantiteTmp $variation floatval($articleComposant->getQuantite());
  2612.             $article     $articleComposant->getArticle();
  2613.             //echo "<div>ART ".$article->getReference()."</div>";
  2614.             if ($articleComposant->getArticle()->getVirtuel() == true && $articleComposant->getArticle()->getProduitInterne() == true) {
  2615.                 $this->modifierStockReserveComposants($article$quantiteTmp);
  2616.             } else {
  2617.                 if ($article->getVirtuel() == true or $article->getNonStocke() == true or $article->getNonCommandable() == true or $article->getMainOeuvre() == true) {
  2618.                 } else {
  2619.                     $stockReserve floatval($article->getStockReserve()) + $quantiteTmp;
  2620.                     $stockReserve max(0$stockReserve);
  2621.                     if (!= and $article->getReference() == "SSSEKR115") {
  2622.                         //echo "<div>SR ".$article->getStockReserve()."</div>";
  2623.                         //echo "<div>ARTICLE ".$article->getReference()."</div>";
  2624.                         //echo "<div>variation ".$variation."</div>";
  2625.                         //echo "<div>quantiteTmp ".$quantiteTmp."</div>";
  2626.                         //echo "<div>stockReserve ".$stockReserve."</div>";
  2627.                         //echo "<div>quantiteTmp ".$quantiteTmp."</div>";
  2628.                         //echo "<div><br/><br/></div>";
  2629.                     }
  2630.                     if ($quantiteTmp != 0) {
  2631.                         $article->setStockReserve($stockReserve);
  2632.                         $this->ebayService->publierAnnonce($article->getId());
  2633.                         /*
  2634.                         $nbEmplacement = count($article->getEmplacements());
  2635.                         //echo "<div>NB E ".$nbEmplacement."</div>";
  2636.                         if($nbEmplacement > 0) {
  2637.                             $compteur = 0;
  2638.                             foreach($article->getEmplacements() as $e) {
  2639.                                 //echo "<div>".$e->getLibelle()." cpt : ".$compteur."</div>";
  2640.                                 if($compteur == 0) {
  2641.                                     $e->setStockReserve(floatval($e->getStockReserve())+floatval($quantiteTmp));
  2642.                                     $this->em->persist($e);
  2643.                                 }
  2644.                                 $compteur++;
  2645.                             }
  2646.                         }
  2647.                                 */
  2648.                         //emplacement par défaut
  2649.                         $emplacementPardefaut $repo_emplacement->findOneBy(['article' => $article->getId(), 'defaut' => true'visibilite' => true]);
  2650.                         if ( ! is_object($emplacementPardefaut)) {
  2651.                             $emplacementPardefaut $repo_emplacement->findOneBy(['article' => $article->getId(), 'visibilite' => true]);
  2652.                         }
  2653.                         if (is_object($emplacementPardefaut)) {
  2654.                             $stockReserveEmplacement floatval($emplacementPardefaut->getStockReserve()) + floatval($quantiteTmp);
  2655.                             $stockReserveEmplacement max(0$stockReserveEmplacement);
  2656.                             $emplacementPardefaut->setStockReserve($stockReserveEmplacement);
  2657.                             $this->entityManager->persist($emplacementPardefaut);
  2658.                         }
  2659.                     }
  2660.                     if (!= and $article->getReference() == "SSSEKR115") {
  2661.                         //echo "<div>ARTICLE SR ".$article->getStockReserve()."</div>";
  2662.                         //echo "<div><br/><br/></div>";
  2663.                     }
  2664.                     $this->entityManager->persist($article);
  2665.                     $this->entityManager->flush();
  2666.                 }
  2667.             }
  2668.         }
  2669.         //$this->em->flush();
  2670.         //exit;
  2671.     }
  2672.     public function majConditionAchatImport(Article $article$prix null)
  2673.     {
  2674.         $repo_condition_achat $this->entityManager->getRepository(ConditionAchat::class);
  2675.         $conditionAchat       $repo_condition_achat->findOneBy(['article' => $article'defaut' => true]);
  2676.         if (is_object($conditionAchat)) {
  2677.             if ($prix === null) {
  2678.                 $prix        $article->getPrixBase();
  2679.                 $prixArticle $article->getPrixBase();
  2680.             } else {
  2681.                 $prix        str_replace(",""."$prix);
  2682.                 $prixArticle $prix;
  2683.             }
  2684.             $tauxChange  1;
  2685.             $fournisseur $conditionAchat->getFournisseur();
  2686.             if (is_object($fournisseur)) {
  2687.                 $devise $fournisseur->getDevise();
  2688.             }
  2689.             if (is_object($devise) && $devise->getTauxChange() != 0) {
  2690.                 $tauxChange $devise->getTauxChange();
  2691.             }
  2692.             $prix $prix $tauxChange//prix de base converti en devise
  2693.             $conditionAchat->setPrixAchatBrut($prix);
  2694.             $prixAchatNet $prix * (- ($conditionAchat->getTauxRemise() / 100)) * (- ($conditionAchat->getTauxRemiseSupplementaire() / 100));
  2695.             $coefficient  $conditionAchat->getCoefficient();
  2696.             if ($coefficient != 0) {
  2697.                 $prixAchatNet $prixAchatNet $coefficient;
  2698.             }
  2699.             $prixAchatNet += $conditionAchat->getFraisAnnexes();
  2700.             $conditionAchat->setPrixAchatNet($prixAchatNet);
  2701.             $this->entityManager->persist($conditionAchat);
  2702.             if ($article->getMajPrix() == 1) {
  2703.                 $article->setPrixBase($prixArticle $tauxChange);
  2704.                 $prixVente floatval($article->getPrixVente());
  2705.                 //$prixVente = $article->getCoefficientPrixBaseVente()*$prixArticle;
  2706.                 //$article->setPrixVente($prixVente);
  2707.                 $margeReelle $prixVente $article->getCpump();
  2708.                 $article->setMargeReelle($margeReelle);
  2709.                 $this->entityManager->persist($article);
  2710.             }
  2711.             $this->entityManager->flush();
  2712.         }
  2713.     }
  2714.     public function majEnFonctionDuPrixAchat(Article $article$prix null)
  2715.     {
  2716.         //Si maj auto du prix cochée, le prix de base de l'article = le prix brut de la condition d'achat par défaut
  2717.         if ($article->getMajPrix() == 1) {
  2718.             $repo_condition_achat $this->entityManager->getRepository(ConditionAchat::class);
  2719.             //$conditionAchat = $repo_condition_achat->findOneBy(array('article'=>$article, 'defaut'=>true));
  2720.             $conditionAchat '';
  2721.             $qteConseillee  $this->getQteConseillee($article);
  2722.             if ( ! empty($qteConseillee['condition'])) {
  2723.                 $conditionAchat $qteConseillee['condition'];
  2724.             }
  2725.             if (is_object($conditionAchat)) {
  2726.                 if ($prix === null) {
  2727.                     $prix $conditionAchat->getPrixAchatBrut();
  2728.                 }
  2729.                 if ($conditionAchat->getCoefficientConditionnement() != 0) {
  2730.                     $prix $prix $conditionAchat->getCoefficientConditionnement();
  2731.                 }
  2732.                 $tauxChange  1;
  2733.                 $fournisseur $conditionAchat->getFournisseur();
  2734.                 if (is_object($fournisseur)) {
  2735.                     $devise $fournisseur->getDevise();
  2736.                 }
  2737.                 if (is_object($devise) && $devise->getTauxChange() != 0) {
  2738.                     $tauxChange $devise->getTauxChange();
  2739.                 }
  2740.                 $prix $prix $tauxChange//prix d'achat brut converti en euros
  2741.                 //
  2742.             }
  2743.             $prix round($prix2);
  2744.             $article->setPrixBase($prix);
  2745.         } else {
  2746.             $prix $article->getPrixBase();
  2747.         }
  2748.         if (floatval($article->getCoefficientPrixBaseVente()) == 0) {
  2749.             $article->setCoefficientPrixBaseVente(1);
  2750.             $prixVente $prix;
  2751.         } else {
  2752.             //$prixVente = floatval($article->getCoefficientPrixBaseVente()) * $prix;
  2753.             $prixVente                $article->getPrixVente();
  2754.             $coefficientPrixBaseVente 1;
  2755.             if ($prix != 0) {
  2756.                 $coefficientPrixBaseVente $prixVente $prix;
  2757.             }
  2758.             $article->setCoefficientPrixBaseVente($coefficientPrixBaseVente);
  2759.         }
  2760.         //$article->setPrixVente($prixVente);
  2761.         //$marge = $prixVente - $prix;
  2762.         //recupérer la condition d'achat par défaut
  2763.         /*
  2764.         $repo_condition_achat = $this->em->getRepository(ConditionAchat::class);
  2765.         $conditionAchat = $repo_condition_achat->findOneBy(array('article'=>$article, 'defaut'=>true));
  2766.         if(is_object($conditionAchat)){
  2767.             $prixNetAchat = $conditionAchat->getPrixAchatNet();
  2768.             $marge = $prixVente - $prixNetAchat;
  2769.             $article->setMarge($marge);
  2770.             $tauxMarge = $marge / $prixVente * 100;
  2771.             $article->setTauxMarge($tauxMarge);
  2772.         }
  2773.          *
  2774.          */
  2775.         $margeReelle $prixVente $article->getCpump();
  2776.         $article->setMargeReelle($margeReelle);
  2777.         $this->entityManager->persist($article);
  2778.         if ($article->getMajPrix() == 1) {
  2779.             $message_historique            = [];
  2780.             $message_historique["titre"]   = "Mise Ã  jour du prix suite modification condition d'achat par défaut";
  2781.             $message_historique["message"] = "";
  2782.             $this->creerHistorique($article'defaut'$message_historique);
  2783.         }
  2784.         $this->entityManager->flush();
  2785.     }
  2786.     public function majCondHaEnFonctionPrixBasePourImport(Article $article)
  2787.     {
  2788.         //return "RRRRRR";
  2789.         $repo_fournisseur $this->entityManager->getRepository(Fournisseur::class);
  2790.         $conn             $this->entityManager->getConnection();
  2791.         if ($article->getMajPrix() == 1) {
  2792.             /*
  2793.             $sql = "SELECT * FROM article__condition_achat WHERE article_id = :article_id and statut = :statut LIMIT 0,1";
  2794.             $stmt = $conn->prepare($sql);
  2795.             $stmt->bindValue('article_id',$article->getid());
  2796.             $stmt->bindValue('statut',"1");
  2797.             $stmt->execute();
  2798.             $existe = $stmt->fetchAllAssociative();
  2799.             */
  2800.             $repo_condition_achat $this->entityManager->getRepository(ConditionAchat::class);
  2801.             $conditionAchat       $repo_condition_achat->findOneBy(['article' => $article'defaut' => true]);
  2802.             if (is_object($conditionAchat)) {
  2803.                 $prix       $article->getPrixBase();
  2804.                 $tauxChange 1;
  2805.                 $fournisseur $conditionAchat->getFournisseur();
  2806.                 //$fournisseur = $repo_fournisseur->find($existe["0"]["fournisseur_id"]);
  2807.                 if (is_object($fournisseur)) {
  2808.                     $devise $fournisseur->getDevise();
  2809.                 }
  2810.                 if (is_object($devise) && $devise->getTauxChange() != 0) {
  2811.                     $tauxChange $devise->getTauxChange();
  2812.                 }
  2813.                 $prix $prix $tauxChange//prix de base converti en devise
  2814.                 $conditionAchat->setPrixAchatBrut($prix);
  2815.                 $prixAchatNet $prix * (- ($conditionAchat->getTauxRemise() / 100)) * (- ($conditionAchat->getTauxRemiseSupplementaire() / 100));
  2816.                 $coefficient  $conditionAchat->getCoefficient();
  2817.                 if ($coefficient != 0) {
  2818.                     $prixAchatNet $prixAchatNet $coefficient;
  2819.                 }
  2820.                 $prixAchatNet += $conditionAchat->getFraisAnnexes();
  2821.                 $conditionAchat->setPrixAchatNet($prixAchatNet);
  2822.                 //$this->em->persist($conditionAchat);
  2823.                 //$this->em->flush();
  2824.                 $sql "UPDATE article__condition_achat SET prix_achat_brut='".$prix."' , prix_achat_net='".$prixAchatNet."' WHERE id=".$conditionAchat->getId()." ";
  2825.                 //echo $sql;
  2826.                 $stmt $conn->executeQuery($sql);
  2827.             }
  2828.             //print_r($existe);
  2829.             //exit;
  2830.         }
  2831.         //echo "OUOIUIUIIIO";
  2832.         return true;
  2833.     }
  2834.     public function majCondHaEnFonctionPrixBase(Article $article)
  2835.     {
  2836.         if ($article->getMajPrix() == 1) {
  2837.             $repo_condition_achat $this->entityManager->getRepository(ConditionAchat::class);
  2838.             $conditionAchat       $repo_condition_achat->findOneBy(['article' => $article'defaut' => true]);
  2839.             if (is_object($conditionAchat)) {
  2840.                 $prix $article->getPrixBase();
  2841.                 $cc   floatval($conditionAchat->getCoefficientConditionnement());
  2842.                 if ($cc != 0) {
  2843.                     $prix $prix $cc;
  2844.                 }
  2845.                 $tauxChange  1;
  2846.                 $fournisseur $conditionAchat->getFournisseur();
  2847.                 if (is_object($fournisseur)) {
  2848.                     $devise $fournisseur->getDevise();
  2849.                     if (is_object($devise) && $devise->getTauxChange() != 0) {
  2850.                         $tauxChange $devise->getTauxChange();
  2851.                     }
  2852.                     $prix $prix $tauxChange//prix de base converti en devise
  2853.                 }
  2854.                 $conditionAchat->setPrixAchatBrut($prix);
  2855.                 $prixAchatNet $prix * (- ($conditionAchat->getTauxRemise() / 100)) * (- ($conditionAchat->getTauxRemiseSupplementaire() / 100));
  2856.                 $coefficient  $conditionAchat->getCoefficient();
  2857.                 if ($coefficient != 0) {
  2858.                     $prixAchatNet $prixAchatNet $coefficient;
  2859.                 }
  2860.                 $prixAchatNet += $conditionAchat->getFraisAnnexes();
  2861.                 $conditionAchat->setPrixAchatNet($prixAchatNet);
  2862.                 $this->entityManager->persist($conditionAchat);
  2863.                 $this->entityManager->flush();
  2864.             }
  2865.         }
  2866.     }
  2867.     public function ralClient($articleId)
  2868.     {
  2869.         //$ralClient = $this->em->getRepository(ArticleCommande::class)->getRalClient($articleId);return $ralClient;
  2870.         //return 2;
  2871.         $article      $this->entityManager->getRepository(Article::class)->find($articleId);
  2872.         $ralClient    0;
  2873.         $composants   $this->entityManager->getRepository(ArticleComposant::class)->getComposantsComposeVirtuel($article)->getQuery()->getResult();
  2874.         $reservations $this->entityManager->getRepository(ArticleCommande::class)->getRalClientEtCmdAssociees($article$composants);
  2875.         foreach ($reservations as $reservation) {
  2876.             foreach ($reservation as $res) {
  2877.                 //print_r($res);
  2878.                 if (array_key_exists('ral_quantite'$res)) {
  2879.                     $ralClient += floatval($res['ral_quantite']);
  2880.                     //echo $ralClient.'/ ';
  2881.                 }
  2882.                 /*
  2883.                             if(array_key_exists('quantite', $res))
  2884.                                 $stockReserveNouveau += floatval($res['quantite']);
  2885.                              *
  2886.                              */
  2887.             }
  2888.         }
  2889.         return $ralClient;
  2890.     }
  2891.     public function ralFournisseurPositifNegatif($articleId)
  2892.     {
  2893.         //$ralClient = $this->em->getRepository(ArticleCommande::class)->getRalClient($articleId);return $ralClient;
  2894.         //return 2;
  2895.         $article               $this->entityManager->getRepository(Article::class)->find($articleId);
  2896.         $ralFournisseur        $article->getRalFournisseur();
  2897.         $ralFournisseurPositif 0;
  2898.         $ralFournisseurNegatif 0;
  2899.         $ralFournisseurNegatif $this->getRalFournisseur($articletrue);
  2900.         $ralFournisseurPositif $article->getRalFournisseur() + abs($ralFournisseurNegatif);
  2901.         return ['ralFournisseur' => $ralFournisseur'ralFournisseurPositif' => $ralFournisseurPositif'ralFournisseurNegatif' => $ralFournisseurNegatif];
  2902.     }
  2903.     public function ralClientPositifNegatif($articleId)
  2904.     {
  2905.         //$ralClient = $this->em->getRepository(ArticleCommande::class)->getRalClient($articleId);return $ralClient;
  2906.         //return 2;
  2907.         $article          $this->entityManager->getRepository(Article::class)->find($articleId);
  2908.         $ralClient        0;
  2909.         $ralClientPositif 0;
  2910.         $ralClientNegatif 0;
  2911.         $composants       $this->entityManager->getRepository(ArticleComposant::class)->getComposantsComposeVirtuel($article)->getQuery()->getResult();
  2912.         $reservations     $this->entityManager->getRepository(ArticleCommande::class)->getRalClientEtCmdAssociees($article$composants);
  2913.         //dump($reservations);
  2914.         foreach ($reservations as $reservation) {
  2915.             foreach ($reservation as $res) {
  2916.                 if (array_key_exists('ral_quantite'$res)) {
  2917.                     $ralClient += floatval($res['ral_quantite']);
  2918.                     if ($res['articleId'] != $articleId) {
  2919.                         if (floatval($res['ral_quantite']) > 0) {
  2920.                             $ralClientPositif += floatval($res['ral_quantite']);
  2921.                         }
  2922.                         if (floatval($res['ral_quantite']) < 0) {
  2923.                             $ralClientNegatif += floatval($res['ral_quantite']);
  2924.                         }
  2925.                     }
  2926.                     //if(floatval($res['ral_quantite']) > 0) $ralClientPositif += floatval($res['ral_quantite']);
  2927.                     //if(floatval($res['ral_quantite']) < 0) $ralClientNegatif += floatval($res['ral_quantite']);
  2928.                     //echo $ralClient.'/ ';
  2929.                 }
  2930.                 if ($res['articleId'] == $articleId) {
  2931.                     if (array_key_exists('ral_quantite_positive'$res)) {
  2932.                         $ralClientPositif += floatval($res['ral_quantite_positive']);
  2933.                     }
  2934.                     if (array_key_exists('ral_quantite_negative'$res)) {
  2935.                         $ralClientNegatif += floatval($res['ral_quantite_negative']);
  2936.                     }
  2937.                 }
  2938.             }
  2939.         }
  2940.         return ['ralClient' => $ralClient'ralClientPositif' => $ralClientPositif'ralClientNegatif' => $ralClientNegatif];
  2941.     }
  2942.     public function getMarge($article)
  2943.     {
  2944.         if ( ! is_object($article)) {
  2945.             $repo_article $this->entityManager->getRepository(Article::class);
  2946.             $article      $repo_article->find($article);
  2947.         }
  2948.         $prixVente        $article->getPrixVente();
  2949.         $marge            0;
  2950.         $tauxMarge        0;
  2951.         $prixNetAchatEuro 0;
  2952.         $prixNetAchatEuro $article->getPrixBase();
  2953.         $marge            $prixVente $prixNetAchatEuro;
  2954.         if ($prixVente != '' && $prixVente != 0) {
  2955.             $tauxMarge $marge $prixVente 100;
  2956.         } else {
  2957.             $tauxMarge 0;
  2958.         }
  2959.         $repo_condition_achat $this->entityManager->getRepository(ConditionAchat::class);
  2960.         $conditionAchat       $repo_condition_achat->findOneBy(['article' => $article'defaut' => true]);
  2961.         if (is_object($conditionAchat)) {
  2962.             $prixNetAchat               floatval($conditionAchat->getPrixAchatNet());
  2963.             $coefficientConditionnement floatval($conditionAchat->getCoefficientConditionnement());
  2964.             if ($coefficientConditionnement != && $coefficientConditionnement != 1) {
  2965.                 $prixNetAchat $prixNetAchat $coefficientConditionnement;
  2966.             }
  2967.             $tauxChange  1;
  2968.             $fournisseur $conditionAchat->getFournisseur();
  2969.             if (is_object($fournisseur)) {
  2970.                 $devise $fournisseur->getDevise();
  2971.                 if (is_object($devise) && $devise->getTauxChange() != 0) {
  2972.                     $tauxChange $devise->getTauxChange();
  2973.                 }
  2974.             }
  2975.             $prixNetAchatEuro $prixNetAchat $tauxChange;
  2976.             $marge            $prixVente $prixNetAchatEuro;
  2977.             if ($prixVente != '' && $prixVente != 0) {
  2978.                 $tauxMarge $marge $prixVente 100;
  2979.             } else {
  2980.                 $tauxMarge 0;
  2981.             }
  2982.         }
  2983.         return ['marge' => $marge'tauxMarge' => $tauxMarge'prixNetAchatEuro' => $prixNetAchatEuro];
  2984.     }
  2985.     public function construireRequeteRechercheArticleChaine($param = [], $type "rechercher"$param2 = [])
  2986.     {
  2987.         if ($type == "afficher") {
  2988.             $sql "SELECT id as '0',reference as '1',libelle as '2',prix_vente as '3',stock as '4' FROM article__article as a";
  2989.         } elseif ($type == "rechercher") {
  2990.             $sql "SELECT a.id,libelle,reference FROM article__article as a";
  2991.         } elseif ($type == "modifier") {
  2992.             $sql "SELECT a.id FROM article__article as a";
  2993.         }
  2994.         $where "";
  2995.         $join  "";
  2996.         //print_r($param);
  2997.         if (array_key_exists('dtc_articlesbundle_article'$param)) {
  2998.             $parametre_article $param['dtc_articlesbundle_article'];
  2999.             if (array_key_exists('reference'$parametre_article) && trim($parametre_article['reference']) != "") {
  3000.                 if ($where == "") {
  3001.                     $where .= " WHERE ";
  3002.                 } else {
  3003.                     $where .= " AND ";
  3004.                 }
  3005.                 if (strpos($parametre_article['reference'], "*") !== false) {
  3006.                     $parametre_article['reference'] = str_replace("*""%"$parametre_article['reference']);
  3007.                     $where                          .= "a.reference like '".$parametre_article['reference']."'";
  3008.                 } else {
  3009.                     $where .= "a.reference = '".$parametre_article['reference']."'";
  3010.                 }
  3011.             }
  3012.             for ($i 1$i 12$i++) {
  3013.                 if (array_key_exists('referenceAppel'.$i$parametre_article) && trim($parametre_article['referenceAppel'.$i]) != "") {
  3014.                     if ($where == "") {
  3015.                         $where .= " WHERE ";
  3016.                     } else {
  3017.                         $where .= " AND ";
  3018.                     }
  3019.                     if (strpos($parametre_article['referenceAppel'.$i], "*") !== false) {
  3020.                         $parametre_article['referenceAppel'.$i] = str_replace("*""%"$parametre_article['referenceAppel'.$i]);
  3021.                         $where                                  .= "a.reference_appel_".$i." like '".$parametre_article['referenceAppel'.$i]."'";
  3022.                     } else {
  3023.                         $where .= "a.reference_appel_".$i." = '".$parametre_article['referenceAppel'.$i]."'";
  3024.                     }
  3025.                 }
  3026.             }
  3027.             if (array_key_exists('referenceFournisseur'$parametre_article) && trim($parametre_article['referenceFournisseur']) != "") {
  3028.                 if ($where == "") {
  3029.                     $where .= " WHERE ";
  3030.                 } else {
  3031.                     $where .= " AND ";
  3032.                 }
  3033.                 if (strpos($parametre_article['referenceFournisseur'], "*") !== false) {
  3034.                     $parametre_article['referenceFournisseur'] = str_replace("*""%"$parametre_article['referenceFournisseur']);
  3035.                     $where                                     .= "a.reference_fournisseur like '".$parametre_article['referenceFournisseur']."'";
  3036.                 } else {
  3037.                     $where .= "a.reference_fournisseur = '".$parametre_article['referenceFournisseur']."'";
  3038.                 }
  3039.                 //$where .= "a.reference_fournisseur = '".$parametre_article['referenceFournisseur']."'";
  3040.             }
  3041.             if (array_key_exists('referenceClient'$parametre_article) && trim($parametre_article['referenceClient']) != "") {
  3042.                 if ($where == "") {
  3043.                     $where .= " WHERE ";
  3044.                 } else {
  3045.                     $where .= " AND ";
  3046.                 }
  3047.                 if (strpos($parametre_article['referenceClient'], "*") !== false) {
  3048.                     $parametre_article['referenceClient'] = str_replace("*""%"$parametre_article['referenceClient']);
  3049.                     $where                                .= "a.reference_client like '".$parametre_article['referenceClient']."'";
  3050.                 } else {
  3051.                     $where .= "a.reference_client = '".$parametre_article['referenceClient']."'";
  3052.                 }
  3053.                 //$where .= "a.reference_client = '".$parametre_article['referenceClient']."'";
  3054.             }
  3055.             if (array_key_exists('libelle'$parametre_article) && trim($parametre_article['libelle']) != "") {
  3056.                 if ($where == "") {
  3057.                     $where .= " WHERE ";
  3058.                 } else {
  3059.                     $where .= " AND ";
  3060.                 }
  3061.                 if (strpos($parametre_article['libelle'], "*") !== false) {
  3062.                     $parametre_article['libelle'] = str_replace("*""%"$parametre_article['libelle']);
  3063.                     $where                        .= "a.libelle like '".$parametre_article['libelle']."'";
  3064.                 } else {
  3065.                     $where .= "a.libelle = '".$parametre_article['libelle']."'";
  3066.                 }
  3067.                 //$where .= "a.libelle = '".$parametre_article['libelle']."'";
  3068.             }
  3069.             if (array_key_exists('libelleSecondaire'$parametre_article) && trim($parametre_article['libelleSecondaire']) != "") {
  3070.                 if ($where == "") {
  3071.                     $where .= " WHERE ";
  3072.                 } else {
  3073.                     $where .= " AND ";
  3074.                 }
  3075.                 if (strpos($parametre_article['libelleSecondaire'], "*") !== false) {
  3076.                     $parametre_article['libelleSecondaire'] = str_replace("*""%"$parametre_article['libelleSecondaire']);
  3077.                     $where                                  .= "a.libelle_secondaire like '".$parametre_article['libelleSecondaire']."'";
  3078.                 } else {
  3079.                     $where .= "a.libelle_secondaire = '".$parametre_article['libelleSecondaire']."'";
  3080.                 }
  3081.                 //$where .= "a.libelle_secondaire = '".$parametre_article['libelleSecondaire']."'";
  3082.             }
  3083.             if (array_key_exists('seuilMiniCommandeFournisseur'$parametre_article) && trim($parametre_article['seuilMiniCommandeFournisseur']) != "") {
  3084.                 if ($where == "") {
  3085.                     $where .= " WHERE ";
  3086.                 } else {
  3087.                     $where .= " AND ";
  3088.                 }
  3089.                 $where .= "seuil_commande_f_mini = '".$parametre_article['seuilMiniCommandeFournisseur']."'";
  3090.             }
  3091.             if (array_key_exists('seuilMaxiCommandeFournisseur'$parametre_article) && trim($parametre_article['seuilMaxiCommandeFournisseur']) != "") {
  3092.                 if ($where == "") {
  3093.                     $where .= " WHERE ";
  3094.                 } else {
  3095.                     $where .= " AND ";
  3096.                 }
  3097.                 $where .= "seuil_commande_f_maxi = '".$parametre_article['seuilMaxiCommandeFournisseur']."'";
  3098.             }
  3099.             if (array_key_exists('conditionnement'$parametre_article) && trim($parametre_article['conditionnement']) != "") {
  3100.                 if ($where == "") {
  3101.                     $where .= " WHERE ";
  3102.                 } else {
  3103.                     $where .= " AND ";
  3104.                 }
  3105.                 $where .= "conditionnement = '".$parametre_article['conditionnement']."'";
  3106.             }
  3107.             if (array_key_exists('commentairePonctuel'$parametre_article) && trim($parametre_article['commentairePonctuel']) != "") {
  3108.                 if ($where == "") {
  3109.                     $where .= " WHERE ";
  3110.                 } else {
  3111.                     $where .= " AND ";
  3112.                 }
  3113.                 $where .= "commentaire = '".$parametre_article['commentairePonctuel']."'";
  3114.             }
  3115.             if (array_key_exists('descriptionCourte'$parametre_article) && trim($parametre_article['descriptionCourte']) != "") {
  3116.                 if ($where == "") {
  3117.                     $where .= " WHERE ";
  3118.                 } else {
  3119.                     $where .= " AND ";
  3120.                 }
  3121.                 $where .= "description_courte = '".$parametre_article['descriptionCourte']."'";
  3122.             }
  3123.             if (array_key_exists('description'$parametre_article) && trim($parametre_article['description']) != "") {
  3124.                 if ($where == "") {
  3125.                     $where .= " WHERE ";
  3126.                 } else {
  3127.                     $where .= " AND ";
  3128.                 }
  3129.                 $where .= "description = '".$parametre_article['description']."'";
  3130.             }
  3131.             if (array_key_exists('aConsigner'$parametre_article) && trim($parametre_article['aConsigner']) != "") {
  3132.                 if ($where == "") {
  3133.                     $where .= " WHERE ";
  3134.                 } else {
  3135.                     $where .= " AND ";
  3136.                 }
  3137.                 $where .= "a_consigner = '".$parametre_article['aConsigner']."'";
  3138.             }
  3139.             if (array_key_exists('consigne'$parametre_article) && trim($parametre_article['consigne']) != "") {
  3140.                 if ($where == "") {
  3141.                     $where .= " WHERE ";
  3142.                 } else {
  3143.                     $where .= " AND ";
  3144.                 }
  3145.                 $where .= "consigne = '".$parametre_article['consigne']."'";
  3146.             }
  3147.             if (array_key_exists('produitInterne'$parametre_article) && trim($parametre_article['produitInterne']) != "") {
  3148.                 if ($where == "") {
  3149.                     $where .= " WHERE ";
  3150.                 } else {
  3151.                     $where .= " AND ";
  3152.                 }
  3153.                 $where .= "produit_interne = '".$parametre_article['produitInterne']."'";
  3154.             }
  3155.             if (array_key_exists('virtuel'$parametre_article) && trim($parametre_article['virtuel']) != "") {
  3156.                 if ($where == "") {
  3157.                     $where .= " WHERE ";
  3158.                 } else {
  3159.                     $where .= " AND ";
  3160.                 }
  3161.                 $where .= "virtuel = '".$parametre_article['virtuel']."'";
  3162.             }
  3163.             if (array_key_exists('afficherComposantPdfInterne'$parametre_article) && trim($parametre_article['afficherComposantPdfInterne']) != "") {
  3164.                 if ($where == "") {
  3165.                     $where .= " WHERE ";
  3166.                 } else {
  3167.                     $where .= " AND ";
  3168.                 }
  3169.                 $where .= "afficher_composant_pdf_interne = '".$parametre_article['afficherComposantPdfInterne']."'";
  3170.             }
  3171.             if (array_key_exists('afficherComposantPdfExterne'$parametre_article) && trim($parametre_article['afficherComposantPdfExterne']) != "") {
  3172.                 if ($where == "") {
  3173.                     $where .= " WHERE ";
  3174.                 } else {
  3175.                     $where .= " AND ";
  3176.                 }
  3177.                 $where .= "afficher_composant_pdf_externe = '".$parametre_article['afficherComposantPdfExterne']."'";
  3178.             }
  3179.             if (array_key_exists('nonCommandable'$parametre_article) && trim($parametre_article['nonCommandable']) != "") {
  3180.                 if ($where == "") {
  3181.                     $where .= " WHERE ";
  3182.                 } else {
  3183.                     $where .= " AND ";
  3184.                 }
  3185.                 $where .= "non_commandable = '".$parametre_article['nonCommandable']."'";
  3186.             }
  3187.             if (array_key_exists('stockAuto'$parametre_article) && trim($parametre_article['stockAuto']) != "") {
  3188.                 if ($where == "") {
  3189.                     $where .= " WHERE ";
  3190.                 } else {
  3191.                     $where .= " AND ";
  3192.                 }
  3193.                 $where .= "stock_auto = '".$parametre_article['stockAuto']."'";
  3194.             }
  3195.             if (array_key_exists('nonStocke'$parametre_article) && trim($parametre_article['nonStocke']) != "") {
  3196.                 if ($where == "") {
  3197.                     $where .= " WHERE ";
  3198.                 } else {
  3199.                     $where .= " AND ";
  3200.                 }
  3201.                 $where .= "non_stocke = '".$parametre_article['nonStocke']."'";
  3202.             }
  3203.             if (array_key_exists('majPrix'$parametre_article) && trim($parametre_article['majPrix']) != "") {
  3204.                 if ($where == "") {
  3205.                     $where .= " WHERE ";
  3206.                 } else {
  3207.                     $where .= " AND ";
  3208.                 }
  3209.                 $where .= "maj_prix = '".$parametre_article['majPrix']."'";
  3210.             }
  3211.             if (array_key_exists('arretGamme'$parametre_article) && trim($parametre_article['arretGamme']) != "") {
  3212.                 if ($where == "") {
  3213.                     $where .= " WHERE ";
  3214.                 } else {
  3215.                     $where .= " AND ";
  3216.                 }
  3217.                 $where .= "arret_gamme = '".$parametre_article['arretGamme']."'";
  3218.             }
  3219.             if (array_key_exists('divers'$parametre_article) && trim($parametre_article['divers']) != "") {
  3220.                 if ($where == "") {
  3221.                     $where .= " WHERE ";
  3222.                 } else {
  3223.                     $where .= " AND ";
  3224.                 }
  3225.                 $where .= "divers = '".$parametre_article['divers']."'";
  3226.             }
  3227.             if (array_key_exists('prestation'$parametre_article) && trim($parametre_article['prestation']) != "") {
  3228.                 if ($where == "") {
  3229.                     $where .= " WHERE ";
  3230.                 } else {
  3231.                     $where .= " AND ";
  3232.                 }
  3233.                 $where .= "prestation = '".$parametre_article['prestation']."'";
  3234.             }
  3235.             if (array_key_exists('mainOeuvre'$parametre_article) && trim($parametre_article['mainOeuvre']) != "") {
  3236.                 if ($where == "") {
  3237.                     $where .= " WHERE ";
  3238.                 } else {
  3239.                     $where .= " AND ";
  3240.                 }
  3241.                 $where .= "main_oeuvre = '".$parametre_article['mainOeuvre']."'";
  3242.             }
  3243.             if (array_key_exists('statut'$parametre_article) && trim($parametre_article['statut']) != "") {
  3244.                 if ($where == "") {
  3245.                     $where .= " WHERE ";
  3246.                 } else {
  3247.                     $where .= " AND ";
  3248.                 }
  3249.                 $where .= "statut = '".$parametre_article['statut']."'";
  3250.             }
  3251.             if (array_key_exists('largeur'$parametre_article) && trim($parametre_article['largeur']) != "") {
  3252.                 if ($where == "") {
  3253.                     $where .= " WHERE ";
  3254.                 } else {
  3255.                     $where .= " AND ";
  3256.                 }
  3257.                 $where .= "largeur = '".$parametre_article['largeur']."'";
  3258.             }
  3259.             if (array_key_exists('profondeur'$parametre_article) && trim($parametre_article['profondeur']) != "") {
  3260.                 if ($where == "") {
  3261.                     $where .= " WHERE ";
  3262.                 } else {
  3263.                     $where .= " AND ";
  3264.                 }
  3265.                 $where .= "profondeur = '".$parametre_article['profondeur']."'";
  3266.             }
  3267.             if (array_key_exists('hauteur'$parametre_article) && trim($parametre_article['hauteur']) != "") {
  3268.                 if ($where == "") {
  3269.                     $where .= " WHERE ";
  3270.                 } else {
  3271.                     $where .= " AND ";
  3272.                 }
  3273.                 $where .= "hauteur = '".$parametre_article['hauteur']."'";
  3274.             }
  3275.             if (array_key_exists('poids'$parametre_article) && trim($parametre_article['poids']) != "") {
  3276.                 if ($where == "") {
  3277.                     $where .= " WHERE ";
  3278.                 } else {
  3279.                     $where .= " AND ";
  3280.                 }
  3281.                 $where .= "poids = '".$parametre_article['poids']."'";
  3282.             }
  3283.             if (array_key_exists('nomWeb'$parametre_article) && trim($parametre_article['nomWeb']) != "") {
  3284.                 if ($where == "") {
  3285.                     $where .= " WHERE ";
  3286.                 } else {
  3287.                     $where .= " AND ";
  3288.                 }
  3289.                 if (strpos($parametre_article['nomWeb'], "*") !== false) {
  3290.                     $parametre_article['nomWeb'] = str_replace("*""%"$parametre_article['nomWeb']);
  3291.                     $where                       .= "a.nom_web like '".$parametre_article['nomWeb']."'";
  3292.                 } else {
  3293.                     $where .= "a.nom_web = '".$parametre_article['nomWeb']."'";
  3294.                 }
  3295.                 //$where .= "nom_web = '".$parametre_article['nomWeb']."'";
  3296.             }
  3297.             if (array_key_exists('referenceWeb'$parametre_article) && trim($parametre_article['referenceWeb']) != "") {
  3298.                 if ($where == "") {
  3299.                     $where .= " WHERE ";
  3300.                 } else {
  3301.                     $where .= " AND ";
  3302.                 }
  3303.                 if (strpos($parametre_article['referenceWeb'], "*") !== false) {
  3304.                     $parametre_article['referenceWeb'] = str_replace("*""%"$parametre_article['referenceWeb']);
  3305.                     $where                             .= "a.reference_web like '".$parametre_article['referenceWeb']."'";
  3306.                 } else {
  3307.                     $where .= "a.reference_web = '".$parametre_article['referenceWeb']."'";
  3308.                 }
  3309.                 //$where .= "reference_web = '".$parametre_article['referenceWeb']."'";
  3310.             }
  3311.             if (array_key_exists('referenceFournisseurWeb'$parametre_article) && trim($parametre_article['referenceFournisseurWeb']) != "") {
  3312.                 if ($where == "") {
  3313.                     $where .= " WHERE ";
  3314.                 } else {
  3315.                     $where .= " AND ";
  3316.                 }
  3317.                 if (strpos($parametre_article['referenceFournisseurWeb'], "*") !== false) {
  3318.                     $parametre_article['referenceFournisseurWeb'] = str_replace("*""%"$parametre_article['referenceFournisseurWeb']);
  3319.                     $where                                        .= "a.reference_fournisseur_web like '".$parametre_article['referenceFournisseurWeb']."'";
  3320.                 } else {
  3321.                     $where .= "a.reference_fournisseur_web = '".$parametre_article['referenceFournisseurWeb']."'";
  3322.                 }
  3323.                 //$where .= "reference_fournisseur_web = '".$parametre_article['referenceFournisseurWeb']."'";
  3324.             }
  3325.             if (array_key_exists('descriptionWeb'$parametre_article) && trim($parametre_article['descriptionWeb']) != "") {
  3326.                 if ($where == "") {
  3327.                     $where .= " WHERE ";
  3328.                 } else {
  3329.                     $where .= " AND ";
  3330.                 }
  3331.                 $where .= "description_web = '".$parametre_article['descriptionWeb']."'";
  3332.             }
  3333.             if (array_key_exists('resumeWeb'$parametre_article) && trim($parametre_article['resumeWeb']) != "") {
  3334.                 if ($where == "") {
  3335.                     $where .= " WHERE ";
  3336.                 } else {
  3337.                     $where .= " AND ";
  3338.                 }
  3339.                 $where .= "resume_web = '".$parametre_article['resumeWeb']."'";
  3340.             }
  3341.             if (array_key_exists('ecotaxe'$parametre_article) && trim($parametre_article['ecotaxe']) != "") {
  3342.                 if ($where == "") {
  3343.                     $where .= " WHERE ";
  3344.                 } else {
  3345.                     $where .= " AND ";
  3346.                 }
  3347.                 $where .= "ecotaxe = '".$parametre_article['ecotaxe']."'";
  3348.             }
  3349.             if (array_key_exists('remiseMax'$parametre_article) && trim($parametre_article['remiseMax']) != "") {
  3350.                 if ($where == "") {
  3351.                     $where .= " WHERE ";
  3352.                 } else {
  3353.                     $where .= " AND ";
  3354.                 }
  3355.                 $where .= "remise_max = '".$parametre_article['remiseMax']."'";
  3356.             }
  3357.             if (array_key_exists('marque'$parametre_article) && trim($parametre_article['marque']) != "" && trim($parametre_article['marque']) != "0") {
  3358.                 if ($where == "") {
  3359.                     $where .= " WHERE ";
  3360.                 } else {
  3361.                     $where .= " AND ";
  3362.                 }
  3363.                 $where .= "marque_id = '".$parametre_article['marque']."'";
  3364.             }
  3365.             if (array_key_exists('uniteMesure'$parametre_article) && trim($parametre_article['uniteMesure']) != "" && trim($parametre_article['uniteMesure']) != "0") {
  3366.                 if ($where == "") {
  3367.                     $where .= " WHERE ";
  3368.                 } else {
  3369.                     $where .= " AND ";
  3370.                 }
  3371.                 $where .= "unite_mesure_id = '".$parametre_article['uniteMesure']."'";
  3372.             }
  3373.             if (array_key_exists('categorieRemiseArticle'$parametre_article) && trim($parametre_article['categorieRemiseArticle']) != "" && trim(
  3374.                                                                                                                                                   $parametre_article['categorieRemiseArticle']
  3375.                                                                                                                                               ) != "0") {
  3376.                 if ($where == "") {
  3377.                     $where .= " WHERE ";
  3378.                 } else {
  3379.                     $where .= " AND ";
  3380.                 }
  3381.                 $where .= "categorie_remise_article_id = '".$parametre_article['categorieRemiseArticle']."'";
  3382.             }
  3383.             if (array_key_exists('type'$parametre_article) && trim($parametre_article['type']) != "" && trim($parametre_article['type']) != "0") {
  3384.                 if ($where == "") {
  3385.                     $where .= " WHERE ";
  3386.                 } else {
  3387.                     $where .= " AND ";
  3388.                 }
  3389.                 $where .= "type_id = '".$parametre_article['type']."'";
  3390.             }
  3391.             if (array_key_exists('regleTaxe'$parametre_article) && trim($parametre_article['regleTaxe']) != "" && trim($parametre_article['regleTaxe']) != "0") {
  3392.                 if ($where == "") {
  3393.                     $where .= " WHERE ";
  3394.                 } else {
  3395.                     $where .= " AND ";
  3396.                 }
  3397.                 $where .= "regle_taxe_id = '".$parametre_article['regleTaxe']."'";
  3398.             }
  3399.             /*
  3400.             if (array_key_exists('typeRemiseMax', $parametre_article) && trim($parametre_article['typeRemiseMax']) != "" && trim($parametre_article['typeRemiseMax']) != "0") {
  3401.                 if($where == "") $where .= " WHERE ";
  3402.                 else $where .= " AND ";
  3403.                 $where .= "type_remise_max = '".$parametre_article['typeRemiseMax']."'";
  3404.             }
  3405.             */
  3406.             if (array_key_exists('familleCompta'$parametre_article) && trim($parametre_article['familleCompta']) != "" && trim($parametre_article['familleCompta']) != "0") {
  3407.                 if ($where == "") {
  3408.                     $where .= " WHERE ";
  3409.                 } else {
  3410.                     $where .= " AND ";
  3411.                 }
  3412.                 $where .= "famille_compta_id = '".$parametre_article['familleCompta']."'";
  3413.             }
  3414.             if (array_key_exists('conditionsAchat'$param['dtc_articlesbundle_article'])) {
  3415.                 $parametre_cond_achat $param['dtc_articlesbundle_article']['conditionsAchat'];
  3416.                 //print_r($parametre_cond_achat);
  3417.                 //echo "<div>OK</div>";
  3418.                 $sql_cond_achat   "a.id IN (SELECT article_id FROM article__condition_achat ";
  3419.                 $where_cond_achat "";
  3420.                 if (array_key_exists('referenceFournisseur'$parametre_cond_achat) && trim($parametre_cond_achat['referenceFournisseur']) != "") {
  3421.                     if ($where_cond_achat == "") {
  3422.                         $where_cond_achat .= " WHERE ";
  3423.                     } else {
  3424.                         $where_cond_achat .= " AND ";
  3425.                     }
  3426.                     $where_cond_achat .= "reference_fournisseur = '".$parametre_cond_achat['referenceFournisseur']."'";
  3427.                 }
  3428.                 if (array_key_exists('libelle'$parametre_cond_achat) && trim($parametre_cond_achat['libelle']) != "") {
  3429.                     if ($where_cond_achat == "") {
  3430.                         $where_cond_achat .= " WHERE ";
  3431.                     } else {
  3432.                         $where_cond_achat .= " AND ";
  3433.                     }
  3434.                     $where_cond_achat .= "libelle = '".$parametre_cond_achat['libelle']."'";
  3435.                 }
  3436.                 if (array_key_exists('quantite'$parametre_cond_achat) && trim($parametre_cond_achat['quantite']) != "") {
  3437.                     if ($where_cond_achat == "") {
  3438.                         $where_cond_achat .= " WHERE ";
  3439.                     } else {
  3440.                         $where_cond_achat .= " AND ";
  3441.                     }
  3442.                     $where_cond_achat .= "quantite = '".$parametre_cond_achat['quantite']."'";
  3443.                 }
  3444.                 if (array_key_exists('conditionnement'$parametre_cond_achat) && trim($parametre_cond_achat['conditionnement']) != "") {
  3445.                     if ($where_cond_achat == "") {
  3446.                         $where_cond_achat .= " WHERE ";
  3447.                     } else {
  3448.                         $where_cond_achat .= " AND ";
  3449.                     }
  3450.                     $where_cond_achat .= "conditionnement = '".$parametre_cond_achat['conditionnement']."'";
  3451.                 }
  3452.                 if (array_key_exists('prixAchatBrut'$parametre_cond_achat) && trim($parametre_cond_achat['prixAchatBrut']) != "") {
  3453.                     $parametre_cond_achat['prixAchatBrut'] = str_replace(",""."$parametre_cond_achat['prixAchatBrut']);
  3454.                     if ($where_cond_achat == "") {
  3455.                         $where_cond_achat .= " WHERE ";
  3456.                     } else {
  3457.                         $where_cond_achat .= " AND ";
  3458.                     }
  3459.                     $where_cond_achat .= "prix_achat_brut = '".$parametre_cond_achat['prixAchatBrut']."'";
  3460.                 }
  3461.                 if (array_key_exists('tauxRemise'$parametre_cond_achat) && trim($parametre_cond_achat['tauxRemise']) != "") {
  3462.                     if ($where_cond_achat == "") {
  3463.                         $where_cond_achat .= " WHERE ";
  3464.                     } else {
  3465.                         $where_cond_achat .= " AND ";
  3466.                     }
  3467.                     $where_cond_achat .= "taux_remise = '".$parametre_cond_achat['tauxRemise']."'";
  3468.                 }
  3469.                 if (array_key_exists('tauxRemiseSupplementaire'$parametre_cond_achat) && trim($parametre_cond_achat['tauxRemiseSupplementaire']) != "") {
  3470.                     if ($where_cond_achat == "") {
  3471.                         $where_cond_achat .= " WHERE ";
  3472.                     } else {
  3473.                         $where_cond_achat .= " AND ";
  3474.                     }
  3475.                     $where_cond_achat .= "taux_remise_supplementaire = '".$parametre_cond_achat['tauxRemiseSupplementaire']."'";
  3476.                 }
  3477.                 if (array_key_exists('prixAchatNet'$parametre_cond_achat) && trim($parametre_cond_achat['prixAchatNet']) != "") {
  3478.                     $parametre_cond_achat['prixAchatNet'] = str_replace(",""."$parametre_cond_achat['prixAchatNet']);
  3479.                     if ($where_cond_achat == "") {
  3480.                         $where_cond_achat .= " WHERE ";
  3481.                     } else {
  3482.                         $where_cond_achat .= " AND ";
  3483.                     }
  3484.                     $where_cond_achat .= "prix_achat_net = '".$parametre_cond_achat['prixAchatNet']."'";
  3485.                 }
  3486.                 if (array_key_exists('fournisseur'$parametre_cond_achat) && trim($parametre_cond_achat['fournisseur']) != "") {
  3487.                     if ($where_cond_achat == "") {
  3488.                         $where_cond_achat .= " WHERE ";
  3489.                     } else {
  3490.                         $where_cond_achat .= " AND ";
  3491.                     }
  3492.                     $where_cond_achat .= "fournisseur_id = '".$parametre_cond_achat['fournisseur']."'";
  3493.                 }
  3494.                 $sql_cond_achat .= $where_cond_achat;
  3495.                 if ($sql_cond_achat != "a.id IN (SELECT article_id FROM article__condition_achat ") {
  3496.                     $sql_cond_achat .= " AND statut = '1')";
  3497.                     if ($where == "") {
  3498.                         $where .= " WHERE ";
  3499.                     } else {
  3500.                         $where .= " AND ";
  3501.                     }
  3502.                     $where .= $sql_cond_achat;
  3503.                 }
  3504.             }
  3505.         }
  3506.         if (array_key_exists('categories'$param) && count($param['categories']) > 0) {
  3507.             $parametre_categorie $param['categories'];
  3508.             //$join .= " LEFT JOIN article__article_categorie cat on cat.article_id = a.id";
  3509.             for ($i 0$i count($parametre_categorie); $i++) {
  3510.                 if ($where == "") {
  3511.                     $where .= " WHERE ";
  3512.                 } else {
  3513.                     $where .= " AND ";
  3514.                 }
  3515.                 $where .= "a.id IN (SELECT article_id FROM article__article_categorie WHERE categorie_id IN (";
  3516.                 $where .= $parametre_categorie[$i].",";
  3517.                 $where .= ",";
  3518.                 $where str_replace(",,"""$where);
  3519.                 $where .= "))";
  3520.             }
  3521.         }
  3522.         if ($param2 != null) {
  3523.             if (array_key_exists('articleEnleve'$param2) && trim($param2['articleEnleve']) != "") {
  3524.                 if ($where == "") {
  3525.                     $where .= " WHERE ";
  3526.                 } else {
  3527.                     $where .= " AND ";
  3528.                 }
  3529.                 $article explode("|"$param2['articleEnleve']);
  3530.                 $i       0;
  3531.                 foreach ($article as $articleEnleve) {
  3532.                     if ($i == 0) {
  3533.                         $where .= " id != '".$articleEnleve." ' ";
  3534.                     } elseif ($i == sizeof($article) - 1) {
  3535.                     } else {
  3536.                         $where .= " AND id != '".$articleEnleve." ' ";
  3537.                     }
  3538.                     $i++;
  3539.                 }
  3540.             }
  3541.         }
  3542.         if ($type == "modifier") {
  3543.             $sql $where;
  3544.         } else {
  3545.             $sql $sql.$join.$where;
  3546.         }
  3547.         //echo "<div><br/>".$sql."</div>";
  3548.         //exit;
  3549.         return $sql;
  3550.     }
  3551.     public function rechercheArticleChaine($param = [], $type "rechercher"$param2 = [])
  3552.     {
  3553.         $results      = [];
  3554.         $countResults 0;
  3555.         $conn         $this->entityManager->getConnection();
  3556.         $sql_recherche $this->construireRequeteRechercheArticleChaine($param$type$param2);
  3557.         $stmt          $conn->prepare(trim($sql_recherche));
  3558.         //echo "<div>".$sql_recherche."</div>";
  3559.         $query        $stmt->executeQuery();
  3560.         $results      $query->fetchAllAssociative();
  3561.         $countResults $query->rowCount();
  3562.         $tabRetour    = ["resultats" => $results"nbResultats" => $countResults];
  3563.         return $tabRetour;
  3564.     }
  3565.     public function modifierArticleChaine($param_recherche = [], $param_valeur = [])
  3566.     {
  3567.         //print_r($param_valeur);
  3568.         $sql_update      "UPDATE `article__article` as a SET";
  3569.         $conn            $this->entityManager->getConnection();
  3570.         $sql_recherche   $this->construireRequeteRechercheArticleChaine($param_recherche"modifier"$param_valeur);
  3571.         $liste_resultats "";
  3572.         if (array_key_exists('dtc_articlesbundle_article'$param_valeur)) {
  3573.             $parametre_article $param_valeur['dtc_articlesbundle_article'];
  3574.             /*
  3575.             if (array_key_exists('libelle', $parametre_article) && trim($parametre_article['libelle']) != "") {
  3576.                $sql_update.= " x.libelle = '".trim($parametre_article['libelle'])."'";
  3577.             }
  3578.             */
  3579.             if (array_key_exists('libelle'$parametre_article) && trim($parametre_article['libelle']) != "") {
  3580.                 $sql_update .= " a.libelle = '".trim($parametre_article['libelle'])."',";
  3581.             }
  3582.             if (array_key_exists('referenceFournisseur'$parametre_article) && trim($parametre_article['referenceFournisseur']) != "") {
  3583.                 $sql_update .= " a.reference_fournisseur = '".$parametre_article['referenceFournisseur']."',";
  3584.             }
  3585.             if (array_key_exists('referenceClient'$parametre_article) && trim($parametre_article['referenceClient']) != "") {
  3586.                 $sql_update .= " a.reference_client = '".$parametre_article['referenceClient']."',";
  3587.             }
  3588.             if (array_key_exists('libelleSecondaire'$parametre_article) && trim($parametre_article['libelleSecondaire']) != "") {
  3589.                 $sql_update .= " a.libelle_secondaire = '".$parametre_article['libelleSecondaire']."',";
  3590.             }
  3591.             if (array_key_exists('seuilMiniCommandeFournisseur'$parametre_article) && trim($parametre_article['seuilMiniCommandeFournisseur']) != "") {
  3592.                 $sql_update .= " seuil_commande_f_mini = '".$parametre_article['seuilMiniCommandeFournisseur']."',";
  3593.             }
  3594.             if (array_key_exists('seuilMaxiCommandeFournisseur'$parametre_article) && trim($parametre_article['seuilMaxiCommandeFournisseur']) != "") {
  3595.                 $sql_update .= " seuil_commande_f_maxi = '".$parametre_article['seuilMaxiCommandeFournisseur']."',";
  3596.             }
  3597.             if (array_key_exists('conditionnement'$parametre_article) && trim($parametre_article['conditionnement']) != "") {
  3598.                 $sql_update .= " conditionnement = '".$parametre_article['conditionnement']."',";
  3599.             }
  3600.             if (array_key_exists('commentairePonctuel'$parametre_article) && trim($parametre_article['commentairePonctuel']) != "") {
  3601.                 $sql_update .= " commentaire = '".$parametre_article['commentairePonctuel']."',";
  3602.             }
  3603.             if (array_key_exists('descriptionCourte'$parametre_article) && trim($parametre_article['descriptionCourte']) != "") {
  3604.                 $sql_update .= " description_courte = '".$parametre_article['descriptionCourte']."',";
  3605.             }
  3606.             if (array_key_exists('description'$parametre_article) && trim($parametre_article['description']) != "") {
  3607.                 $sql_update .= " description = '".$parametre_article['description']."',";
  3608.             }
  3609.             if (array_key_exists('aConsigner'$parametre_article) && trim($parametre_article['aConsigner']) != "") {
  3610.                 $sql_update .= " a_consigner = '".$parametre_article['aConsigner']."',";
  3611.             }
  3612.             if (array_key_exists('consigne'$parametre_article) && trim($parametre_article['consigne']) != "") {
  3613.                 $sql_update .= " consigne = '".$parametre_article['consigne']."',";
  3614.             }
  3615.             if (array_key_exists('produitInterne'$parametre_article) && trim($parametre_article['produitInterne']) != "") {
  3616.                 $sql_update .= " produit_interne = '".$parametre_article['produitInterne']."',";
  3617.             }
  3618.             if (array_key_exists('virtuel'$parametre_article) && trim($parametre_article['virtuel']) != "") {
  3619.                 $sql_update .= " virtuel = '".$parametre_article['virtuel']."',";
  3620.             }
  3621.             if (array_key_exists('afficherComposantPdfInterne'$parametre_article) && trim($parametre_article['afficherComposantPdfInterne']) != "") {
  3622.                 $sql_update .= " afficher_composant_pdf_interne = '".$parametre_article['afficherComposantPdfInterne']."',";
  3623.             }
  3624.             if (array_key_exists('afficherComposantPdfExterne'$parametre_article) && trim($parametre_article['afficherComposantPdfExterne']) != "") {
  3625.                 $sql_update .= " afficher_composant_pdf_externe = '".$parametre_article['afficherComposantPdfExterne']."',";
  3626.             }
  3627.             if (array_key_exists('nonCommandable'$parametre_article) && trim($parametre_article['nonCommandable']) != "") {
  3628.                 $sql_update .= " non_commandable = '".$parametre_article['nonCommandable']."',";
  3629.             }
  3630.             if (array_key_exists('stockAuto'$parametre_article) && trim($parametre_article['stockAuto']) != "") {
  3631.                 $sql_update .= " stock_auto = '".$parametre_article['stockAuto']."',";
  3632.             }
  3633.             if (array_key_exists('nonStocke'$parametre_article) && trim($parametre_article['nonStocke']) != "") {
  3634.                 $sql_update .= " non_stocke = '".$parametre_article['nonStocke']."',";
  3635.             }
  3636.             if (array_key_exists('majPrix'$parametre_article) && trim($parametre_article['majPrix']) != "") {
  3637.                 $sql_update .= " maj_prix = '".$parametre_article['majPrix']."',";
  3638.             }
  3639.             if (array_key_exists('arretGamme'$parametre_article) && trim($parametre_article['arretGamme']) != "") {
  3640.                 $sql_update .= " arret_gamme = '".$parametre_article['arretGamme']."',";
  3641.             }
  3642.             if (array_key_exists('divers'$parametre_article) && trim($parametre_article['divers']) != "") {
  3643.                 $sql_update .= " divers = '".$parametre_article['divers']."',";
  3644.             }
  3645.             if (array_key_exists('prestation'$parametre_article) && trim($parametre_article['prestation']) != "") {
  3646.                 $sql_update .= " prestation = '".$parametre_article['prestation']."',";
  3647.             }
  3648.             if (array_key_exists('mainOeuvre'$parametre_article) && trim($parametre_article['mainOeuvre']) != "") {
  3649.                 $sql_update .= " main_oeuvre = '".$parametre_article['mainOeuvre']."',";
  3650.             }
  3651.             if (array_key_exists('statut'$parametre_article) && trim($parametre_article['statut']) != "") {
  3652.                 $sql_update .= " statut = '".$parametre_article['statut']."',";
  3653.             }
  3654.             if (array_key_exists('largeur'$parametre_article) && trim($parametre_article['largeur']) != "") {
  3655.                 $sql_update .= " largeur = '".$parametre_article['largeur']."',";
  3656.             }
  3657.             if (array_key_exists('profondeur'$parametre_article) && trim($parametre_article['profondeur']) != "") {
  3658.                 $sql_update .= " profondeur = '".$parametre_article['profondeur']."',";
  3659.             }
  3660.             if (array_key_exists('hauteur'$parametre_article) && trim($parametre_article['hauteur']) != "") {
  3661.                 $sql_update .= " hauteur = '".$parametre_article['hauteur']."',";
  3662.             }
  3663.             if (array_key_exists('poids'$parametre_article) && trim($parametre_article['poids']) != "") {
  3664.                 $sql_update .= " poids = '".$parametre_article['poids']."',";
  3665.             }
  3666.             if (array_key_exists('nomWeb'$parametre_article) && trim($parametre_article['nomWeb']) != "") {
  3667.                 $sql_update .= " nom_web = '".$parametre_article['nomWeb']."',";
  3668.             }
  3669.             if (array_key_exists('referenceWeb'$parametre_article) && trim($parametre_article['referenceWeb']) != "") {
  3670.                 $sql_update .= " reference_web = '".$parametre_article['referenceWeb']."',";
  3671.             }
  3672.             if (array_key_exists('referenceFournisseurWeb'$parametre_article) && trim($parametre_article['referenceFournisseurWeb']) != "") {
  3673.                 $sql_update .= " reference_fournisseur_web = '".$parametre_article['referenceFournisseurWeb']."',";
  3674.             }
  3675.             if (array_key_exists('descriptionWeb'$parametre_article) && trim($parametre_article['descriptionWeb']) != "") {
  3676.                 $sql_update .= " description_web = '".$parametre_article['descriptionWeb']."',";
  3677.             }
  3678.             if (array_key_exists('resumeWeb'$parametre_article) && trim($parametre_article['resumeWeb']) != "") {
  3679.                 $sql_update .= " resume_web = '".$parametre_article['resumeWeb']."',";
  3680.             }
  3681.             if (array_key_exists('marque'$parametre_article) && trim($parametre_article['marque']) != "" && trim($parametre_article['marque']) != "0") {
  3682.                 $sql_update .= " marque_id = '".$parametre_article['marque']."',";
  3683.             }
  3684.             if (array_key_exists('categorieRemiseArticle'$parametre_article) && trim($parametre_article['categorieRemiseArticle']) != "" && trim(
  3685.                                                                                                                                                   $parametre_article['categorieRemiseArticle']
  3686.                                                                                                                                               ) != "0") {
  3687.                 $sql_update .= " categorie_remise_article_id = '".$parametre_article['categorieRemiseArticle']."',";
  3688.             }
  3689.             if (array_key_exists('type'$parametre_article) && trim($parametre_article['type']) != "" && trim($parametre_article['type']) != "0") {
  3690.                 $sql_update .= " type_id = '".$parametre_article['type']."',";
  3691.             }
  3692.             if (array_key_exists('regleTaxe'$parametre_article) && trim($parametre_article['regleTaxe']) != "" && trim($parametre_article['regleTaxe']) != "0") {
  3693.                 $sql_update .= " regle_taxe_id = '".$parametre_article['regleTaxe']."',";
  3694.             }
  3695.             if (array_key_exists('familleCompta'$parametre_article) && trim($parametre_article['familleCompta']) != "" && trim($parametre_article['familleCompta']) != "0") {
  3696.                 $sql_update .= " famille_compta_id = '".$parametre_article['familleCompta']."',";
  3697.             }
  3698.             $sql_update .= ",";
  3699.             $sql_update str_replace(",,"""$sql_update);
  3700.         }
  3701.         if ($sql_update == "UPDATE `article__article` as a SET,") {
  3702.             //echo "<div>PAS UPDATE</div>";
  3703.         } else {
  3704.             $sql_update .= $sql_recherche;
  3705.             //echo "<div>SQL UPDATE : ".$sql_update."</div>";
  3706.             $stmt $conn->prepare(trim($sql_update));
  3707.             $nbLignes $stmt->executeQuery()->rowCount();
  3708.             //exit;
  3709.         }
  3710.         if (
  3711.             (array_key_exists('prixBase'$parametre_article) && trim($parametre_article['prixBase']) != "")
  3712.             or
  3713.             (array_key_exists('prixVente'$parametre_article) && trim($parametre_article['prixVente']) != "")
  3714.             or
  3715.             (array_key_exists('coefficientPrixBaseVente'$parametre_article) && trim($parametre_article['coefficientPrixBaseVente']) != "")
  3716.             or
  3717.             (array_key_exists('tauxMarge'$parametre_article) && trim($parametre_article['tauxMarge']) != "")
  3718.         ) {
  3719.             $liste_resultats $this->rechercheArticleChaine($param_recherche"rechercher"$param_valeur);
  3720.             $articles        $liste_resultats["resultats"];
  3721.             $nbLignes        count($articles);
  3722.             $repoArticle     $this->entityManager->getRepository(Article::class);
  3723.             for ($i 0$i count($articles); $i++) {
  3724.                 $article $repoArticle->find($articles[$i]["id"]);
  3725.                 if (is_object($article)) {
  3726.                     //print_r($parametre_article);
  3727.                     //echo "TOTO";
  3728.                     $prixBase                 "";
  3729.                     $prixVente                "";
  3730.                     $coefficientPrixBaseVente "";
  3731.                     $tauxMarge                "";
  3732.                     if (array_key_exists('prixBase'$parametre_article) && trim($parametre_article['prixBase']) != "" && trim($parametre_article['prixBase']) != 0) {
  3733.                         $prixBase trim($parametre_article['prixBase']);
  3734.                     } else {
  3735.                         $prixBase $article->getPrixBase();
  3736.                     }
  3737.                     if (array_key_exists('prixVente'$parametre_article) && trim($parametre_article['prixVente']) != "" && trim($parametre_article['prixVente']) != 0) {
  3738.                         $prixVente trim($parametre_article['prixVente']);
  3739.                     } else {
  3740.                         $prixVente $article->getPrixVente();
  3741.                     }
  3742.                     if (array_key_exists('coefficientPrixBaseVente'$parametre_article) && trim($parametre_article['coefficientPrixBaseVente']) != "" && trim(
  3743.                                                                                                                                                               $parametre_article['coefficientPrixBaseVente']
  3744.                                                                                                                                                           ) != 0) {
  3745.                         $coefficientPrixBaseVente trim($parametre_article['coefficientPrixBaseVente']);
  3746.                     } else {
  3747.                         $coefficientPrixBaseVente $article->getCoefficientPrixBaseVente();
  3748.                     }
  3749.                     if (array_key_exists('tauxMarge'$parametre_article) && trim($parametre_article['tauxMarge']) != "") {
  3750.                         $tauxMarge trim($parametre_article['tauxMarge']);
  3751.                     } else {
  3752.                         $tauxMarge $article->getTauxMarge();
  3753.                     }
  3754.                     if (array_key_exists('prixBase'$parametre_article) && trim($parametre_article['prixBase']) != ""
  3755.                         && array_key_exists('coefficientPrixBaseVente'$parametre_article) && trim($parametre_article['coefficientPrixBaseVente']) != ""
  3756.                         && array_key_exists('prixVente'$parametre_article) && trim($parametre_article['prixVente']) != ""
  3757.                     ) {
  3758.                         $prixVente $prixBase $coefficientPrixBaseVente;
  3759.                         //$article->setCommentairePonctuel('cas 1');
  3760.                     } elseif (array_key_exists('prixBase'$parametre_article) && trim($parametre_article['prixBase']) != "" && trim($parametre_article['prixBase']) != 0
  3761.                               && array_key_exists('coefficientPrixBaseVente'$parametre_article) && trim($parametre_article['coefficientPrixBaseVente']) != ""
  3762.                     ) {
  3763.                         $prixVente $prixBase $coefficientPrixBaseVente;
  3764.                         //$article->setCommentairePonctuel('cas 2');
  3765.                     } elseif (array_key_exists('prixBase'$parametre_article) && trim($parametre_article['prixBase']) != "" && trim($parametre_article['prixBase']) != 0
  3766.                               && array_key_exists('prixVente'$parametre_article) && trim($parametre_article['prixVente']) != "" && trim($parametre_article['prixVente']) != 0
  3767.                     ) {
  3768.                         $coefficientPrixBaseVente $prixVente $prixBase;
  3769.                         //$article->setCommentairePonctuel('cas 3');
  3770.                     } elseif (array_key_exists('prixBase'$parametre_article) && trim($parametre_article['prixBase']) != "" && trim($parametre_article['prixBase']) != 0
  3771.                     ) {
  3772.                         if ($article->getMajPrix()) {
  3773.                             $prixVente $prixBase $coefficientPrixBaseVente;
  3774.                             //$article->setCommentairePonctuel('cas 4');
  3775.                         } else {
  3776.                             $coefficientPrixBaseVente $prixVente $prixBase;
  3777.                             //$article->setCommentairePonctuel('cas 5');
  3778.                         }
  3779.                     } elseif (array_key_exists('coefficientPrixBaseVente'$parametre_article) && trim($parametre_article['coefficientPrixBaseVente']) != ""
  3780.                               && array_key_exists('prixVente'$parametre_article) && trim($parametre_article['prixVente']) != ""
  3781.                     ) {
  3782.                         $prixBase $prixVente $coefficientPrixBaseVente;
  3783.                         //$article->setCommentairePonctuel('cas 6');
  3784.                     } elseif (array_key_exists('prixVente'$parametre_article) && trim($parametre_article['prixVente']) != ""
  3785.                     ) {
  3786.                         $coefficientPrixBaseVente $prixVente $prixBase;
  3787.                         //$article->setCommentairePonctuel('cas 7');
  3788.                     } elseif (array_key_exists('coefficientPrixBaseVente'$parametre_article) && trim($parametre_article['coefficientPrixBaseVente']) != ""
  3789.                     ) {
  3790.                         $prixVente $prixBase $coefficientPrixBaseVente;
  3791.                         //$article->setCommentairePonctuel('cas 8');
  3792.                     } else {
  3793.                         //$article->setCommentairePonctuel('cas 9');
  3794.                     }
  3795.                     $margeReelle round($prixVente $article->getCpump(), 2);
  3796.                     $article->setPrixBase(round($prixBase2));
  3797.                     $article->setPrixVente($prixVente);
  3798.                     $article->setCoefficientPrixBaseVente(round($coefficientPrixBaseVente2));
  3799.                     //$article->setTauxMarge(round($tauxMarge,2));
  3800.                     //$article->setMarge(round($marge,2));
  3801.                     $article->setMargeReelle(round($margeReelle2));
  3802.                     $this->entityManager->persist($article);
  3803.                     //$this->em->refresh($article);
  3804.                     if ($article->getMajPrix()) {
  3805.                         //Mettre a jour la condition d'achat
  3806.                         $this->majCondHaEnFonctionPrixBase($article);
  3807.                     }
  3808.                 }
  3809.             }
  3810.             $this->entityManager->flush();
  3811.         }
  3812.         if (array_key_exists('conditionsAchat'$parametre_article)) {
  3813.             $parametre_cond_achat $parametre_article['conditionsAchat'];
  3814.             //print_r($parametre_cond_achat);
  3815.             //echo "<div>OK cond achat</div>";
  3816.             $maj_cond_achat      false;
  3817.             $maj_cond_achat_prix false;
  3818.             if (
  3819.                 (array_key_exists('referenceFournisseur'$parametre_cond_achat) && trim($parametre_cond_achat['referenceFournisseur']) != "")
  3820.                 or
  3821.                 (array_key_exists('libelle'$parametre_cond_achat) && trim($parametre_cond_achat['libelle']) != "")
  3822.                 or
  3823.                 (array_key_exists('quantite'$parametre_cond_achat) && trim($parametre_cond_achat['quantite']) != "")
  3824.                 or
  3825.                 (array_key_exists('conditionnement'$parametre_cond_achat) && trim($parametre_cond_achat['conditionnement']) != "")
  3826.                 or
  3827.                 (array_key_exists('prixAchatBrut'$parametre_cond_achat) && trim($parametre_cond_achat['prixAchatBrut']) != "")
  3828.                 or
  3829.                 (array_key_exists('tauxRemise'$parametre_cond_achat) && trim($parametre_cond_achat['tauxRemise']) != "")
  3830.                 or
  3831.                 (array_key_exists('tauxRemiseSupplementaire'$parametre_cond_achat) && trim($parametre_cond_achat['tauxRemiseSupplementaire']) != "")
  3832.                 or
  3833.                 (array_key_exists('prixAchatNet'$parametre_cond_achat) && trim($parametre_cond_achat['prixAchatNet']) != "")
  3834.                 or
  3835.                 (array_key_exists('fournisseur'$parametre_cond_achat) && trim($parametre_cond_achat['fournisseur']) != "")
  3836.                 or
  3837.                 (array_key_exists('fraisAnnexes'$parametre_cond_achat) && trim($parametre_cond_achat['fraisAnnexes']) != "")
  3838.                 or
  3839.                 (array_key_exists('coefficient'$parametre_cond_achat) && trim($parametre_cond_achat['coefficient']) != "")
  3840.             ) {
  3841.                 $maj_cond_achat true;
  3842.             }
  3843.             if ($maj_cond_achat) {
  3844.                 $repoArticle   $this->entityManager->getRepository(Article::class);
  3845.                 $repoCondAchat $this->entityManager->getRepository(ConditionAchat::class);
  3846.                 if ( ! is_array($liste_resultats)) {
  3847.                     $liste_resultats $this->rechercheArticleChaine($param_recherche"rechercher");
  3848.                 }
  3849.                 $articles $liste_resultats["resultats"];
  3850.                 $nbLignes count($articles);
  3851.                 for ($i 0$i count($articles); $i++) {
  3852.                     $sql_cond_achat "UPDATE article__condition_achat SET ";
  3853.                     //echo "<div>ART : ".$articles[$i]["id"]."</div>";
  3854.                     if (array_key_exists('referenceFournisseur'$parametre_cond_achat) && trim($parametre_cond_achat['referenceFournisseur']) != "") {
  3855.                         $sql_cond_achat .= " reference_fournisseur = '".$parametre_cond_achat['referenceFournisseur']."',";
  3856.                     }
  3857.                     if (array_key_exists('libelle'$parametre_cond_achat) && trim($parametre_cond_achat['libelle']) != "") {
  3858.                         $sql_cond_achat .= " libelle = '".$parametre_cond_achat['libelle']."',";
  3859.                     }
  3860.                     if (array_key_exists('quantite'$parametre_cond_achat) && trim($parametre_cond_achat['quantite']) != "") {
  3861.                         $sql_cond_achat .= " quantite = '".$parametre_cond_achat['quantite']."',";
  3862.                     }
  3863.                     if (array_key_exists('conditionnement'$parametre_cond_achat) && trim($parametre_cond_achat['conditionnement']) != "") {
  3864.                         $sql_cond_achat .= " conditionnement = '".$parametre_cond_achat['conditionnement']."',";
  3865.                     }
  3866.                     if (array_key_exists('fournisseur'$parametre_cond_achat) && trim($parametre_cond_achat['fournisseur']) != "") {
  3867.                         $sql_cond_achat .= " fournisseur_id = '".$parametre_cond_achat['fournisseur']."',";
  3868.                     }
  3869.                     if (array_key_exists('fraisAnnexes'$parametre_cond_achat) && trim($parametre_cond_achat['fraisAnnexes']) != "") {
  3870.                         $sql_cond_achat .= " frais_annexes = '".$parametre_cond_achat['fraisAnnexes']."',";
  3871.                     }
  3872.                     if (array_key_exists('coefficient'$parametre_cond_achat) && trim($parametre_cond_achat['coefficient']) != "") {
  3873.                         $sql_cond_achat .= " coefficient = '".$parametre_cond_achat['coefficient']."',";
  3874.                     }
  3875.                     if (
  3876.                         (array_key_exists('prixAchatBrut'$parametre_cond_achat) && trim($parametre_cond_achat['prixAchatBrut']) != "")
  3877.                         or
  3878.                         (array_key_exists('tauxRemise'$parametre_cond_achat) && trim($parametre_cond_achat['tauxRemise']) != "")
  3879.                         or
  3880.                         (array_key_exists('tauxRemiseSupplementaire'$parametre_cond_achat) && trim($parametre_cond_achat['tauxRemiseSupplementaire']) != "")
  3881.                         or
  3882.                         (array_key_exists('prixAchatNet'$parametre_cond_achat) && trim($parametre_cond_achat['prixAchatNet']) != "")
  3883.                         or
  3884.                         (array_key_exists('coefficient'$parametre_cond_achat) && trim($parametre_cond_achat['coefficient']) != "")
  3885.                         or
  3886.                         (array_key_exists('fraisAnnexes'$parametre_cond_achat) && trim($parametre_cond_achat['fraisAnnexes']) != "")
  3887.                     ) {
  3888.                         $maj_cond_achat_prix true;
  3889.                         $article             $repoArticle->find($articles[$i]["id"]);
  3890.                         if (is_object($article)) {
  3891.                             $condition $repoCondAchat->findOneBy(["article" => $article"defaut" => "1"]);
  3892.                             if (is_object($condition)) {
  3893.                                 //echo "<div>COND ACHAT ".$condition->getId()."</div>";
  3894.                                 $prixAchatBrut            "";
  3895.                                 $tauxRemise               "";
  3896.                                 $tauxRemiseSupplementaire "";
  3897.                                 $prixAchatNet             "";
  3898.                                 if (array_key_exists('prixAchatBrut'$parametre_cond_achat) && trim($parametre_cond_achat['prixAchatBrut']) != "") {
  3899.                                     $condition->setPrixAchatBrut(trim($parametre_cond_achat['prixAchatBrut']));
  3900.                                 }
  3901.                                 if (array_key_exists('tauxRemise'$parametre_cond_achat) && trim($parametre_cond_achat['tauxRemise']) != "") {
  3902.                                     $condition->setTauxRemise(trim($parametre_cond_achat['tauxRemise']));
  3903.                                 }
  3904.                                 if (array_key_exists('tauxRemise'$parametre_cond_achat) && trim($parametre_cond_achat['tauxRemise']) != "") {
  3905.                                     $condition->setTauxRemise(trim($parametre_cond_achat['tauxRemise']));
  3906.                                 }
  3907.                                 if (array_key_exists('tauxRemiseSupplementaire'$parametre_cond_achat) && trim($parametre_cond_achat['tauxRemiseSupplementaire']) != "") {
  3908.                                     $condition->setTauxRemiseSupplementaire(trim($parametre_cond_achat['tauxRemiseSupplementaire']));
  3909.                                 }
  3910.                                 if (array_key_exists('coefficient'$parametre_cond_achat) && trim($parametre_cond_achat['coefficient']) != "") {
  3911.                                     $condition->setCoefficient(trim($parametre_cond_achat['coefficient']));
  3912.                                 }
  3913.                                 if (array_key_exists('fraisAnnexes'$parametre_cond_achat) && trim($parametre_cond_achat['fraisAnnexes']) != "") {
  3914.                                     $condition->setFraisAnnexes(trim($parametre_cond_achat['fraisAnnexes']));
  3915.                                 }
  3916.                                 //Calcul du prix achat net
  3917.                                 $prixAchatNet $condition->getPrixAchatBrut() * (- ($condition->getTauxRemise() / 100)) * (- ($condition->getTauxRemiseSupplementaire() / 100));
  3918.                                 $coefficient  $condition->getCoefficient();
  3919.                                 if ($coefficient != 0) {
  3920.                                     $prixAchatNet $prixAchatNet $coefficient;
  3921.                                 }
  3922.                                 $prixAchatNet += $condition->getFraisAnnexes();
  3923.                                 $condition->setPrixAchatNet($prixAchatNet);
  3924.                                 //Calcul du coefficient
  3925.                                 /*
  3926.                                     if($prixAchatNet > 0){
  3927.                                         $coefficient = $condition->getPrixAchatBrut() / $prixAchatNet;
  3928.                                         $condition->setCoefficient($coefficient);
  3929.                                     }
  3930.                                              *
  3931.                                              */
  3932.                                 $this->majEnFonctionDuPrixAchat($article$condition->getPrixAchatBrut());
  3933.                                 $this->entityManager->persist($condition);
  3934.                             }
  3935.                         }
  3936.                     }
  3937.                     if ($sql_cond_achat != "UPDATE article__condition_achat SET ") {
  3938.                         $sql_cond_achat .= ",";
  3939.                         $sql_cond_achat str_replace(",,"""$sql_cond_achat);
  3940.                         $sql_cond_achat .= " WHERE article_id = '".$articles[$i]["id"]."' and statut = '1'";
  3941.                         //echo "<div>SQL COND ACHAT : ".$sql_cond_achat." <br/><br/></div>";
  3942.                         $stmt $conn->prepare($sql_cond_achat);
  3943.                         $stmt->executeQuery();
  3944.                     }
  3945.                 }
  3946.                 if ($maj_cond_achat_prix) {
  3947.                     $this->entityManager->flush();
  3948.                 }
  3949.             }
  3950.         }
  3951.         $user $this->security->getUser();
  3952.         $chemin_pic $_SERVER["DOCUMENT_ROOT"]."/uploads/tmp/articles/user/".$user->getId()."/images/".$param_valeur['tokenPicture'];
  3953.         $chemin_doc $_SERVER["DOCUMENT_ROOT"]."/uploads/tmp/documents/user/".$user->getId()."/documents/".$param_valeur['tokenDocument'];
  3954.         if (is_dir($chemin_pic) || is_dir($chemin_doc)) {
  3955.             $repoArticle $this->entityManager->getRepository(Article::class);
  3956.             if ( ! is_array($liste_resultats)) {
  3957.                 $liste_resultats $this->rechercheArticleChaine($param_recherche"rechercher");
  3958.             }
  3959.             $articles $liste_resultats["resultats"];
  3960.             $nbLignes count($articles);
  3961.             for ($i 0$i count($articles); $i++) {
  3962.                 $article $repoArticle->find($articles[$i]["id"]);
  3963.                 if (is_object($article)) {
  3964.                     $this->imageArticleService->sauvegarder($article'images'$param_valeur['tokenPicture'], false$param_valeur['supprimerImgExistant'], $param_valeur['publierImgWeb']);
  3965.                     $this->documentArticleService->sauvegarder(
  3966.                         $article,
  3967.                         'documents',
  3968.                         $param_valeur['tokenDocument'],
  3969.                         false,
  3970.                         $param_valeur['supprimerDocExistant'],
  3971.                         $param_valeur['publierDocWeb']
  3972.                     );
  3973.                     //$imageService->sauvegarder($article,'images',$param_valeur['tokenPicture'],false,false);
  3974.                 }
  3975.             }
  3976.             //$nbLignes = 999999;
  3977.         }
  3978.         if (array_key_exists('categories'$param_valeur) && count($param_valeur['categories']) > 0) {
  3979.             $liste_resultats $this->rechercheArticleChaine($param_recherche"rechercher");
  3980.             $articles        $liste_resultats["resultats"];
  3981.             $nbLignes        count($articles);
  3982.             ///echo "<div>MODIF CATEGORIE</div>";
  3983.             $parametre_categorie $param_valeur['categories'];
  3984.             $sqlCategorie        "DELETE FROM `article__article_categorie` WHERE article_id IN (SELECT * FROM  (".$sql_recherche.") AS tmp)";
  3985.             //echo "<div>sqlCategorie : ".$sqlCategorie."</div>";
  3986.             $stmt $conn->prepare($sqlCategorie);
  3987.             $stmt->executeQuery();
  3988.             for ($z 0$z count($param_valeur['categories']); $z++) {
  3989.                 for ($i 0$i count($articles); $i++) {
  3990.                     //echo "<div>TITITI ".count($param_valeur['categories'])."</div>";
  3991.                     $reqInsert "INSERT INTO `article__article_categorie` (article_id,categorie_id) VALUES ('".$articles[$i]["id"]."','".$param_valeur["categories"][$z]."')";
  3992.                     $stmt      $conn->prepare($reqInsert);
  3993.                     $stmt->executeQuery();
  3994.                     //echo "<div>ARTICLE : ".$articles[$i]["reference"]." ==> ".$reqInsert."</div>";
  3995.                 }
  3996.             }
  3997.         }
  3998.         //$nbLignes = 0;
  3999.         return $nbLignes;
  4000.         //return $tabRetour;
  4001.     }
  4002.     public function construireWhereMajEnChaine($param = [])
  4003.     {
  4004.         $where  "";
  4005.         $select "SELECT id FROM `article__article` as x ";
  4006.         $retour = [];
  4007.         if (array_key_exists('marque'$param) && $param['marque'] != "") {
  4008.             if ($where == "") {
  4009.                 $where .= " WHERE";
  4010.             } else {
  4011.                 $where .= " AND";
  4012.             }
  4013.             $where .= " marque_id = '".$param['marque']."'";
  4014.         }
  4015.         if (array_key_exists('sous_categorie_article_sel'$param) && $param['sous_categorie_article_sel'] != "") {
  4016.             if ($where == "") {
  4017.                 $where .= " WHERE";
  4018.             } else {
  4019.                 $where .= " AND";
  4020.             }
  4021.             $where .= " x.id IN (SELECT article_id FROM `article__article_categorie` WHERE `categorie_id` = ".$param['sous_categorie_article_sel'].")";
  4022.         } elseif (array_key_exists('categorie_article_sel'$param) && $param['categorie_article_sel'] != "") {
  4023.             if ($where == "") {
  4024.                 $where .= " WHERE";
  4025.             } else {
  4026.                 $where .= " AND";
  4027.             }
  4028.             $where .= " x.id IN (SELECT article_id FROM `article__article_categorie` WHERE `categorie_id` = ".$param['categorie_article_sel'].")";
  4029.         }
  4030.         $select           .= $where;
  4031.         $retour["where"]  = $where;
  4032.         $retour["select"] = $select;
  4033.         return $retour;
  4034.     }
  4035.     public function majEnChaine($param = [])
  4036.     {
  4037.         //print_r($param);
  4038.         $param['valeur'] = floatval($param['valeur']);
  4039.         $countUpdated    "";
  4040.         $sql             "";
  4041.         $conn            $this->entityManager->getConnection();
  4042.         $selection       $this->construireWhereMajEnChaine($param);
  4043.         if (array_key_exists('champ'$param) && array_key_exists('valeur'$param)) {
  4044.             if ($param["champ"] == "largeur" || $param["champ"] == "hauteur" || $param["champ"] == "profondeur" || $param["champ"] == "poids") {
  4045.                 $sql "UPDATE `article__article` as x SET ".$param["champ"]."='".$param['valeur']."'".$selection["where"];
  4046.             } elseif ($param["champ"] == "type") {
  4047.                 $sql "UPDATE `article__article` as x SET type_id='".$param['typeArticle']."'".$selection["where"];
  4048.             } elseif ($param["champ"] == "compta") {
  4049.                 $sql "UPDATE `article__article` as x SET famille_compta_id='".$param['familleComptaArticle']."'".$selection["where"];
  4050.             } elseif ($param["champ"] == "image") {
  4051.                 $stmt $conn->prepare($selection["select"]);
  4052.                 $results     $stmt->executeQuery()->fetchAllAssociative();
  4053.                 $repoArticle $this->entityManager->getRepository(Article::class);
  4054.                 for ($i 0$i count($results); $i++) {
  4055.                     $article $repoArticle->find($results[$i]["id"]);
  4056.                     if (is_object($article)) {
  4057.                         $this->imageArticleService->sauvegarder($article'images'$param['tokenPicture'], false$param['supprimerImgExistant']);
  4058.                     }
  4059.                 }
  4060.             } elseif ($param["champ"] == "document") {
  4061.                 $stmt $conn->prepare($selection["select"]);
  4062.                 $results     $stmt->executeQuery()->fetchAllAssociative();
  4063.                 $repoArticle $this->entityManager->getRepository(Article::class);
  4064.                 for ($i 0$i count($results); $i++) {
  4065.                     $article $repoArticle->find($results[$i]["id"]);
  4066.                     if (is_object($article)) {
  4067.                         $this->documentArticleService->sauvegarder($article'documents'$param['tokenDocument'], false$param['supprimerDocExistant']);
  4068.                     }
  4069.                 }
  4070.             } elseif ($param["champ"] == "categorie") {
  4071.                 $stmt $conn->prepare($selection["select"]);
  4072.                 $results     $stmt->executeQuery()->fetchAllAssociative();
  4073.                 $repoArticle $this->entityManager->getRepository(Article::class);
  4074.                 for ($i 0$i count($results); $i++) {
  4075.                     $article $repoArticle->find($results[$i]["id"]);
  4076.                     if (is_object($article)) {
  4077.                         if ($param["supprimerCategorieExistant"]) {
  4078.                             $sqlCategorie "DELETE FROM `article__article_categorie` WHERE article_id = '".$article->getId()."'";
  4079.                             $stmt         $conn->prepare($sqlCategorie);
  4080.                             $stmt->executeQuery();
  4081.                         }
  4082.                         for ($z 0$z count($param["categories"]); $z++) {
  4083.                             $reqExiste "SELECT count(*) as total FROM `article__article_categorie` WHERE categorie_id = '".$param["categories"][$z]."' AND article_id = '".$article->getId(
  4084.                                 )."'";
  4085.                             $stmt      $conn->prepare($reqExiste);
  4086.                             $resultsExiste $stmt->executeQuery()->fetchAllAssociative();
  4087.                             if ($resultsExiste[0]["total"] == 0) {
  4088.                                 $reqInsert "INSERT INTO `article__article_categorie` (article_id,categorie_id) VALUES ('".$article->getId()."','".$param["categories"][$z]."')";
  4089.                                 $stmt      $conn->prepare($reqInsert);
  4090.                                 $stmt->executeQuery();
  4091.                             }
  4092.                         }
  4093.                     }
  4094.                 }
  4095.             } elseif ($param["champ"] == "coefficient") {
  4096.                 $stmt $conn->prepare($selection["select"]);
  4097.                 $results     $stmt->executeQuery()->fetchAllAssociative();
  4098.                 $repoArticle $this->entityManager->getRepository(Article::class);
  4099.                 for ($i 0$i count($results); $i++) {
  4100.                     $article $repoArticle->find($results[$i]["id"]);
  4101.                     if (is_object($article)) {
  4102.                         if ($article->getPrixBase() > 0) {
  4103.                             $prix_vente  round($article->getPrixBase() * $param['valeur'], 2);
  4104.                             $tauxMarge   round(($prix_vente $article->getPrixBase()) * 100 $prix_vente2);
  4105.                             $marge       $prix_vente $article->getPrixBase();
  4106.                             $margeReelle round($prix_vente $article->getCpump(), 2);
  4107.                             $reqUpdate "UPDATE `article__article` as x SET
  4108.                                         `coefficient_px_base_px_vente` = '".$param['valeur']."',
  4109.                                         `prix_vente` = '".$prix_vente."',
  4110.                                         `taux_marge` = '".$tauxMarge."',
  4111.                                         `marge` = '".$marge."',
  4112.                                         `marge_reelle` = '".$margeReelle."'
  4113.                                         WHERE
  4114.                                         `id` = '".$article->getId()."'
  4115.                                         ";
  4116.                             $stmt      $conn->prepare($reqUpdate);
  4117.                             $stmt->executeQuery();
  4118.                             //if($article->getId() == "1005888") echo "<div>".$reqUpdate."</div>";
  4119.                         }
  4120.                     }
  4121.                 }
  4122.             }
  4123.         }
  4124.         if ($sql != "") {
  4125.             $stmt $conn->prepare($sql);
  4126.             $countUpdated $stmt->executeQuery()->rowCount();
  4127.         }
  4128.         //echo "<div>SQL ".$selection["select"]."</div>";
  4129.         //echo "<div>".$sql." <br/><br/>(".$countUpdated.")\n\n</div>";
  4130.         return $countUpdated;
  4131.     }
  4132.     public function besoin(Article $article)
  4133.     {
  4134.         $dispo $article->getStock() - $article->getStockReserve() + $article->getRalFournisseur();
  4135.         if ($dispo >= 0) {
  4136.             return '';
  4137.         }
  4138.         return abs($dispo);
  4139.     }
  4140.     public function conso(Article $article$nbMois 0$nbMoisDecalage 0)
  4141.     {
  4142.         $repo_mvt_stock $this->entityManager->getRepository(MouvementStock::class);
  4143.         $conso          $repo_mvt_stock->getQteVenduSurPeriode($article$nbMois$nbMoisDecalage);
  4144.         return $conso;
  4145.     }
  4146.     public function conditionnement(Article $articleFournisseur $fournisseur)
  4147.     {
  4148.         $repo_condition_achat $this->entityManager->getRepository(ConditionAchat::class);
  4149.         $conditionnement      0;
  4150.         $conditionAchat       $repo_condition_achat->findOneBy([
  4151.                                                                      'article'     => $article->getId(),
  4152.                                                                      'fournisseur' => $fournisseur->getId(),
  4153.                                                                  ]);
  4154.         if (is_object($conditionAchat)) {
  4155.             $conditionnement $conditionAchat->getConditionnement();
  4156.         }
  4157.         return $conditionnement;
  4158.     }
  4159.     public function getTotalEnfants(Article $article)
  4160.     {
  4161.         $repo_article $this->entityManager->getRepository(Article::class);
  4162.         $articles     $repo_article->findByParent($article);
  4163.         return count($articles);
  4164.     }
  4165.     public function articleCommandeSupprimableCommande(ArticleCommande $ac)
  4166.     {
  4167.         $repo_article $this->entityManager->getRepository(Article::class);
  4168.         return $repo_article->articleCommandeSupprimableCommande($ac);
  4169.     }
  4170.     public function getRaf($article)
  4171.     {
  4172.         $repo $this->entityManager->getRepository(Fabrication::class);
  4173.         return $repo->getRaf($article);
  4174.     }
  4175.     public function derniereEntreeStock($id_article$param = [])
  4176.     {
  4177.         $repo_commande  $this->entityManager->getRepository(Commande::class);
  4178.         $dernier_entree $repo_commande->derniereEntreeStock($id_article$param);
  4179.         return $dernier_entree;
  4180.     }
  4181.     public function derniereSortieStock($id_article$param)
  4182.     {
  4183.         $repo_commande  $this->entityManager->getRepository(Commande::class);
  4184.         $dernier_sortie $repo_commande->derniereSortieStock($id_article$param);
  4185.         return $dernier_sortie;
  4186.     }
  4187.     public function getCategorieNiveauUn($id_article)
  4188.     {
  4189.         $repo_categorie $this->entityManager->getRepository(Categorie::class);
  4190.         $categories     $repo_categorie->getCategorieNiveauUn($id_article);
  4191.         return $categories;
  4192.     }
  4193.     public function getRalClientEtCmdAssociees(Article $article)
  4194.     {
  4195.         $repoArticleCommande $this->entityManager->getRepository(ArticleCommande::class);
  4196.         $reservations        $repoArticleCommande->getRalClientEtCmdAssociees($article);
  4197.         //echo "AAAA ".$article->getReference();
  4198.         return $reservations;
  4199.     }
  4200.     public function getRalFournisseur(Article $article$negatif false)
  4201.     {
  4202.         $repo_article_commande $this->entityManager->getRepository(ArticleCommande::class);
  4203.         $ralFournisseur        $repo_article_commande->getRalFournisseur($article->getId(), $negatif);
  4204.         return $ralFournisseur;
  4205.     }
  4206.     public function quantiteAfabriquer(Article $article)
  4207.     {
  4208.         $dispo $article->getStock() - $article->getStockReserve();
  4209.         $seuil 0;
  4210.         if ($article->getSeuilMiniCommandeFournisseur() > 0) {
  4211.             $seuil $article->getSeuilMiniCommandeFournisseur();
  4212.         }
  4213.         if ($article->getSeuilMaxiCommandeFournisseur() > 0) {
  4214.             $seuil $article->getSeuilMaxiCommandeFournisseur();
  4215.         }
  4216.         $raf      $this->getRaf($article);
  4217.         $quantite $seuil $dispo $raf;
  4218.         if ($quantite <= 0) {
  4219.             $quantite 1;
  4220.         }
  4221.         $repo_condha $this->entityManager->getRepository(ConditionAchat::class);
  4222.         $condHa $repo_condha->findOneBy(["defaut" => "1""fournisseur" => 132"article" => $article]);
  4223.         if (is_object($condHa)) {
  4224.             $qteCondHa $condHa->getQuantite();
  4225.             if ($qteCondHa $quantite) {
  4226.                 $quantite $qteCondHa;
  4227.             }
  4228.         }
  4229.         return $quantite;
  4230.     }
  4231.     public function articleAfabriquer(Article $article)
  4232.     {
  4233.         $raf $this->getRaf($article);
  4234.         $dispo $article->getStock() - $article->getStockReserve() + $raf;
  4235.         //return $dispo;
  4236.         if ($dispo 0) {
  4237.             return 1;
  4238.         }
  4239.         if ($article->getSeuilMiniCommandeFournisseur() > 0) {
  4240.             $seuil    $article->getSeuilMiniCommandeFournisseur();
  4241.             $quantite $seuil $dispo;
  4242.             if ($dispo $seuil) {
  4243.                 return 1;
  4244.             }
  4245.         }
  4246.         return 0;
  4247.     }
  4248.     public function getArticlesAfabriquerSeuilMini()
  4249.     {
  4250.         $articles                   = [];
  4251.         $articlesInternesAFabriquer $this->entityManager->getRepository(Article::class)->getArticlesAfabriquerSeuilMini();
  4252.         foreach ($articlesInternesAFabriquer as $articleInternesAFabriquer) {
  4253.             $raf   $this->getRaf($articleInternesAFabriquer);
  4254.             $dispo $articleInternesAFabriquer->getStock() - $articleInternesAFabriquer->getStockReserve() + $raf;
  4255.             if ($articleInternesAFabriquer->getSeuilMiniCommandeFournisseur() > 0) {
  4256.                 $seuil $articleInternesAFabriquer->getSeuilMiniCommandeFournisseur();
  4257.                 if ($dispo $seuil) {
  4258.                     if ($articleInternesAFabriquer->getSeuilMaxiCommandeFournisseur() > 0) {
  4259.                         $seuil $articleInternesAFabriquer->getSeuilMaxiCommandeFournisseur();
  4260.                     }
  4261.                     $articleTmp = [
  4262.                         'article'  => $articleInternesAFabriquer,
  4263.                         'quantite' => $seuil $dispo,
  4264.                     ];
  4265.                     $articles[] = $articleTmp;
  4266.                 }
  4267.             }
  4268.         }
  4269.         return $articles;
  4270.     }
  4271.     public function dispo(Article $article)
  4272.     {
  4273.         $dispo $article->getStock() - $article->getStockReserve();
  4274.         if ($dispo 0) {
  4275.             $dispo 0;
  4276.         }
  4277.         return $dispo;
  4278.     }
  4279.     public function estReservable(Article $article)
  4280.     {
  4281.         if ($article->getMainOeuvre() == 1) {
  4282.             return false;
  4283.         }
  4284.         return true;
  4285.     }
  4286.     public function getPumpR(Article $article)
  4287.     {
  4288.         return $this->entityManager->getRepository(Article::class)->getPumpR($article->getId());
  4289.     }
  4290.     public function getPumpC(Article $article)
  4291.     {
  4292.         return $this->entityManager->getRepository(Article::class)->getPumpC($article->getId());
  4293.     }
  4294.     public function getPumpComposeVirtuel($id$date_debut ""$date_fin ""$type "")
  4295.     {
  4296.         $article        $this->entityManager->getRepository(Article::class)->find($id);
  4297.         $repo_condha    $this->entityManager->getRepository(ConditionAchat::class);
  4298.         $repo_mouvement $this->entityManager->getRepository(MouvementStock::class);
  4299.         $somme_pump 0;
  4300.         //echo "<div>TYPE : ".$type."</div>";
  4301.         if (is_object($article) && $article->getVirtuel() == true && $article->getProduitInterne() == true) {
  4302.             $composants    $article->getArticlesComposants();
  4303.             $nb_composants count($composants);
  4304.             if (count($composants) > 0) {
  4305.                 foreach ($composants as $c) {
  4306.                     $sql "
  4307.                         SELECT
  4308.                         AVG(ac.cpump) as pump_avg
  4309.                         FROM `article__mouvement_stock` as ac
  4310.                         LEFT JOIN article__article as ar on ar.id = ac.article_id
  4311.                         WHERE
  4312.                         ac.cpump is not null and ac.cpump != 0
  4313.                         AND
  4314.                         ac.date_mouvement >= '".$date_debut->format('Y-m-d H:i:s')."' AND ac.date_mouvement <= '".$date_fin->format('Y-m-d H:i:s')."'
  4315.                         AND ar.id = ".$c->getArticle()->getId()."
  4316.                     ";
  4317.                     //echo "<div>SQL ".$sql."</div>";
  4318.                     $stmt $this->entityManager->getConnection()->prepare($sql);
  4319.                     $retour $stmt->executeQuery()->fetchAllAssociative();
  4320.                     //print_r($retour);
  4321.                     //if($c->getArticle()->getPump() > 0) {
  4322.                     if ($retour[0]["pump_avg"] > 0) {
  4323.                         //echo "<div>OK ".$retour[0]["pump_avg"]."</div>";
  4324.                         $somme_pump $somme_pump $retour[0]["pump_avg"];
  4325.                     } else {
  4326.                         $condHa $repo_condha->findOneBy(["article" => $c->getArticle(), "defaut" => 1]);
  4327.                         if (is_object($condHa)) {
  4328.                             $prix $condHa->getPrixAchatNet();
  4329.                             if ($condHa->getCoefficientConditionnement() != 0) {
  4330.                                 $prix $prix $condHa->getCoefficientConditionnement();
  4331.                             }
  4332.                             $tauxChange  1;
  4333.                             $fournisseur $condHa->getFournisseur();
  4334.                             if (is_object($fournisseur)) {
  4335.                                 $devise $fournisseur->getDevise();
  4336.                             }
  4337.                             if (is_object($devise) && $devise->getTauxChange() != 0) {
  4338.                                 $tauxChange $devise->getTauxChange();
  4339.                             }
  4340.                             $prix $prix $tauxChange//prix d'achat brut converti en euros
  4341.                             $somme_pump $somme_pump $prix;
  4342.                         }
  4343.                     }
  4344.                 }
  4345.             }
  4346.         } elseif (is_object($article)) {
  4347.             $compteur_mouvement 0;
  4348.             if ($type == "bl") {
  4349.                 $sql "
  4350.                 SELECT
  4351.                 ac.id,
  4352.                 ac.date_mouvement,
  4353.                 ac.stock as stock,
  4354.                 ac.cpump as cpump
  4355.                 FROM `article__mouvement_stock` as ac
  4356.                 LEFT JOIN commerciale__commande as c on ac.commande_id = c.id
  4357.                 LEFT JOIN commerciale__commande as f on c.facture_id = f.id
  4358.                 LEFT JOIN client__client as u on u.id = c.client_id
  4359.                 LEFT JOIN article__article as ar on ar.id = ac.article_id
  4360.                 WHERE
  4361.                 ac.article_id = ".$id."
  4362.                 AND
  4363.                 ac.date_mouvement >= '".$date_debut->format('Y-m-d H:i:s')."' AND ac.date_mouvement <= '".$date_fin->format('Y-m-d H:i:s')."'
  4364.                 AND
  4365.                 (
  4366.                 ( (c.type_document_commercial_id = ".TypeDocumentCommercial::BL." AND c.statut_commande_id != 25))
  4367.                 )
  4368.                 AND (c.facture_id is NULL or f.statut_commande_id = 23)
  4369.                 ";
  4370.                 //echo "<div>SQL BL ".$sql."</div>";
  4371.             } else {
  4372.                 $sql "
  4373.                         SELECT
  4374.                         ac.id,
  4375.                         ac.date_mouvement,
  4376.                         ac.stock as stock,
  4377.                         ac.cpump as cpump
  4378.                         FROM `article__mouvement_stock` as ac
  4379.                         LEFT JOIN commerciale__commande as c on ac.commande_id = c.id
  4380.                         LEFT JOIN commerciale__commande as f on c.facture_id = f.id
  4381.                         LEFT JOIN client__client as u on u.id = c.client_id
  4382.                         LEFT JOIN article__article as ar on ar.id = ac.article_id
  4383.                         WHERE
  4384.                         ac.article_id = ".$id."
  4385.                         AND
  4386.                         ac.date_mouvement >= '".$date_debut->format('Y-m-d H:i:s')."' AND ac.date_mouvement <= '".$date_fin->format('Y-m-d H:i:s')."'
  4387.                         AND
  4388.                         (
  4389.                         (  (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))
  4390.                             OR
  4391.                             ((c.type_document_commercial_id = ".TypeDocumentCommercial::FACTURE." AND c.statut_commande_id != 23) )
  4392.                             OR
  4393.                             (c.type_document_commercial_id = ".TypeDocumentCommercial::AVOIR." AND c.statut_commande_id != 19))
  4394.                         )
  4395.                     ";
  4396.                 //echo "<div>SQL NORMAL ".$sql."</div>";
  4397.                 /*
  4398.                 $sql = "
  4399.                     SELECT
  4400.                     ac.stock as stock,
  4401.                     ac.pump as pump
  4402.                     FROM `article__mouvement_stock` as ac
  4403.                     LEFT JOIN article__article as ar on ar.id = ac.article_id
  4404.                     WHERE
  4405.                     ac.date_mouvement >= '".$date_debut->format('Y-m-d H:i:s')."' AND ac.date_mouvement <= '".$date_fin->format('Y-m-d H:i:s')."'
  4406.                     AND ar.id = ".$article->getId()."
  4407.                 ";
  4408.                 */
  4409.             }
  4410.             //echo "<div>SQL ".$sql."</div>";
  4411.             $stmt $this->entityManager->getConnection()->prepare($sql);
  4412.             $retour $stmt->executeQuery()->fetchAllAssociative();
  4413.             if (count($retour) > 0) {
  4414.                 for ($i 0$i count($retour); $i++) {
  4415.                     if ($retour[$i]["stock"] <= or $retour[$i]["cpump"] <= 0) {
  4416.                         //echo "<div>PUMP PAS OK</div>";
  4417.                         $condHa $repo_condha->findOneBy(["article" => $article"defaut" => 1]);
  4418.                         if (is_object($condHa)) {
  4419.                             //echo "<div>CONDHA OK</div>";
  4420.                             $prix $condHa->getPrixAchatNet();
  4421.                             if ($condHa->getCoefficientConditionnement() != 0) {
  4422.                                 $prix $prix $condHa->getCoefficientConditionnement();
  4423.                             }
  4424.                             $tauxChange  1;
  4425.                             $fournisseur $condHa->getFournisseur();
  4426.                             if (is_object($fournisseur)) {
  4427.                                 $devise $fournisseur->getDevise();
  4428.                             }
  4429.                             if (is_object($devise) && $devise->getTauxChange() != 0) {
  4430.                                 $tauxChange $devise->getTauxChange();
  4431.                             }
  4432.                             $prix $prix $tauxChange//prix d'achat brut converti en euros
  4433.                             $compteur_mouvement++;
  4434.                             //echo "<div>PRIX ".$prix."</div>";
  4435.                             $somme_pump $somme_pump $prix;
  4436.                         } else {
  4437.                             $condHa $repo_condha->findOneBy(["article" => $article]);
  4438.                             if (is_object($condHa)) {
  4439.                                 //echo "<div>CONDHA OK</div>";
  4440.                                 $prix $condHa->getPrixAchatNet();
  4441.                                 if ($condHa->getCoefficientConditionnement() != 0) {
  4442.                                     $prix $prix $condHa->getCoefficientConditionnement();
  4443.                                 }
  4444.                                 $tauxChange  1;
  4445.                                 $fournisseur $condHa->getFournisseur();
  4446.                                 if (is_object($fournisseur)) {
  4447.                                     $devise $fournisseur->getDevise();
  4448.                                 }
  4449.                                 if (is_object($devise) && $devise->getTauxChange() != 0) {
  4450.                                     $tauxChange $devise->getTauxChange();
  4451.                                 }
  4452.                                 $prix $prix $tauxChange//prix d'achat brut converti en euros
  4453.                                 $compteur_mouvement++;
  4454.                                 //echo "<div>PRIX ".$prix."</div>";
  4455.                                 $somme_pump $somme_pump $prix;
  4456.                             }
  4457.                         }
  4458.                     } else {
  4459.                         //echo "<div>PUMP OK</div>";
  4460.                         $compteur_mouvement++;
  4461.                         $somme_pump $somme_pump $retour[0]["cpump"];
  4462.                     }
  4463.                 }
  4464.             }
  4465.             //echo "<div>SOMME PUMP ".$somme_pump."</div>";
  4466.             //echo "<div>COMPTEUR MOUVEMNET ".$compteur_mouvement."</div>";
  4467.             if ($compteur_mouvement 0) {
  4468.                 $somme_pump $somme_pump $compteur_mouvement;
  4469.             }
  4470.             //echo "<div>MOYENNE PUMP ".$somme_pump."</div>";
  4471.         }
  4472.         return $somme_pump;
  4473.     }
  4474.     public function getStatsArticle($id$date_debut ""$date_fin ""$integreBl false$parametres = [])
  4475.     {
  4476.         //print_r($parametres);
  4477.         $article        $this->entityManager->getRepository(Article::class)->find($id);
  4478.         $repo_condha    $this->entityManager->getRepository(ConditionAchat::class);
  4479.         $repo_mouvement $this->entityManager->getRepository(MouvementStock::class);
  4480.         $valeurs                  = [];
  4481.         $valeurs["reference"]     = $article->getReference();
  4482.         $valeurs["libelle"]       = $article->getLibelle();
  4483.         $valeurs["quantite"]      = "";
  4484.         $valeurs["ca"]            = "";
  4485.         $valeurs["bl"]            = "";
  4486.         $valeurs["marge"]         = "";
  4487.         $valeurs["margePourcent"] = "";
  4488.         $somme_marge 0;
  4489.         $somme_ca    0;
  4490.         $somme_bl    0;
  4491.         $somme_qte   0;
  4492.         $join_table_client false;
  4493.         $join              "";
  4494.         $where             "";
  4495.         if (array_key_exists('client'$parametres) and $parametres["client"] != "" and $parametres["client"] > 0) {
  4496.             //if(!$join_table_client) $join .= " LEFT JOIN client__client as clt on c.client_id = clt.id";
  4497.             $where .= " AND u.id = '".$parametres["client"]."'";
  4498.             //$join_table_client = true;
  4499.         }
  4500.         if (array_key_exists('categorie_client'$parametres) and $parametres["categorie_client"] > 0) {
  4501.             //if(!$join_table_client) $join .= " LEFT JOIN client__client as clt on c.client_id = clt.id";
  4502.             $join .= " LEFT JOIN client__client_categorie as cltcat on cltcat.client_id = u.id";
  4503.             if (array_key_exists('sous_categorie_client'$parametres) and $parametres["sous_categorie_client"] > 0) {
  4504.                 $where .= " AND (cltcat.categorie_id = '".$parametres["sous_categorie_client"]."' and cltcat.dateSuppression is null)";
  4505.             } else {
  4506.                 $where .= " AND (cltcat.categorie_id = '".$parametres["categorie_client"]."' and cltcat.dateSuppression is null)";
  4507.             }
  4508.             //echo "OK";
  4509.         }
  4510.         //echo "<div>TYPE : ".$type."</div>";
  4511.         $inArticle        $id;
  4512.         $jointureCommande "ac.commande_id";
  4513.         if (is_object($article)) {
  4514.             //echo "test";
  4515.             if (is_object($article) && $article->getVirtuel() == true && $article->getProduitInterne() == true and != 1) {
  4516.                 //echo "<div>COMPOSE</div>";
  4517.                 $composants    $article->getArticlesComposants();
  4518.                 $nb_composants count($composants);
  4519.                 if (count($composants) > 0) {
  4520.                     $tabPumCompose        = [];
  4521.                     $tabArticleComposants = [];
  4522.                     $inArticle            .= ",";
  4523.                     $jointureCommande     "ac.commande_id";
  4524.                     foreach ($composants as $c) {
  4525.                         $inArticle .= $c->getArticle()->getId().",";
  4526.                     }
  4527.                     $inArticle trim($inArticle",");
  4528.                     if ($integreBl) {
  4529.                         //POUR LES BL
  4530.                         $sql "
  4531.                         SELECT
  4532.                         ac.prix_achat,
  4533.                         ac.quantite,
  4534.                         ac.id,
  4535.                         ac.date_mouvement,
  4536.                         ac.stock as stock,
  4537.                         ac.cpump as cpump,
  4538.                         ac.article_id as articleId
  4539.                         FROM `article__mouvement_stock` as ac
  4540.                         LEFT JOIN commerciale__commande as c on ac.commande_id = c.id
  4541.                         LEFT JOIN commerciale__commande as cvirt on ac.commande_virtuel_id = cvirt.id
  4542.                         LEFT JOIN commerciale__commande as f on c.facture_id = f.id
  4543.                         LEFT JOIN commerciale__commande as fvirt on cvirt.facture_id = fvirt.id
  4544.                         LEFT JOIN client__client as u on u.id = c.client_id
  4545.                         LEFT JOIN article__article as ar on ar.id = ac.article_id
  4546.                         ".$join."
  4547.                         WHERE
  4548.                         ac.article_id IN (".$inArticle.")
  4549.                         AND
  4550.                         ac.date_mouvement >= '".$date_debut->format('Y-m-d H:i:s')."' AND ac.date_mouvement <= '".$date_fin->format('Y-m-d H:i:s')."'
  4551.                         AND
  4552.                         (
  4553.                             (
  4554.                                 (c.type_document_commercial_id = ".TypeDocumentCommercial::BL." AND c.statut_commande_id != 25)
  4555.                                 OR
  4556.                                 (cvirt.type_document_commercial_id = ".TypeDocumentCommercial::BL." AND cvirt.statut_commande_id != 25 and ac.commande_virtuel_id is not null)
  4557.                             )
  4558.                         )
  4559.                         AND
  4560.                         (
  4561.                             (c.facture_id is NULL or f.statut_commande_id = 23)
  4562.                             OR
  4563.                             ((cvirt.facture_id is NULL or fvirt.statut_commande_id = 23) and ac.commande_virtuel_id is not null)
  4564.                         )
  4565.                         ".$where."
  4566.                         ";
  4567.                         //echo $sql;
  4568.                         $stmt $this->entityManager->getConnection()->prepare($sql);
  4569.                         $retour $stmt->executeQuery()->fetchAllAssociative();
  4570.                         if (count($retour) > 0) {
  4571.                             $quantite_vente 0;
  4572.                             $prix_vente     0;
  4573.                             $cpump_compose  0;
  4574.                             for ($i 0$i count($retour); $i++) {
  4575.                                 //echo "<div><br/>AAAA ===> ".$retour[$i]["articleId"]."</div>";
  4576.                                 if ($retour[$i]["articleId"] == $id) {
  4577.                                     //   echo "<div>RRRRR ===> ".$retour[$i]["articleId"]."</div>";
  4578.                                     $quantite_vente += $retour[$i]["quantite"];
  4579.                                     $prix_vente     $retour[$i]["prix_achat"];
  4580.                                     $prix_vente     $retour[$i]["cpump"];
  4581.                                     $somme_qte += $retour[$i]["quantite"];
  4582.                                     $somme_bl  += $retour[$i]["quantite"] * $retour[$i]["prix_achat"];
  4583.                                 } elseif (!= 1) {
  4584.                                     //echo "<div>WWWW ===> ".$retour[$i]["articleId"]."</div>";
  4585.                                     if ($retour[$i]["stock"] <= or $retour[$i]["cpump"] <= 0) {
  4586.                                         //echo "<div>PUMP PAS OK</div>";
  4587.                                         $condHa $repo_condha->findOneBy(["article" => $retour[$i]["articleId"], "defaut" => 1]);
  4588.                                         if (is_object($condHa)) {
  4589.                                             //echo "<div>CONDHA OK</div>";
  4590.                                             $prix $condHa->getPrixAchatNet();
  4591.                                             if ($condHa->getCoefficientConditionnement() != 0) {
  4592.                                                 $prix $prix $condHa->getCoefficientConditionnement();
  4593.                                             }
  4594.                                             $tauxChange  1;
  4595.                                             $fournisseur $condHa->getFournisseur();
  4596.                                             if (is_object($fournisseur)) {
  4597.                                                 $devise $fournisseur->getDevise();
  4598.                                             }
  4599.                                             if (is_object($devise) && $devise->getTauxChange() != 0) {
  4600.                                                 $tauxChange $devise->getTauxChange();
  4601.                                             }
  4602.                                             $prix          $prix $tauxChange//prix d'achat brut converti en euros
  4603.                                             $cpump_compose $prix;
  4604.                                             //echo "<div>PRIX CHA: ".$prix."</div>";
  4605.                                         } else {
  4606.                                             $condHa $repo_condha->findOneBy(["article" => $retour[$i]["articleId"]]);
  4607.                                             if (is_object($condHa)) {
  4608.                                                 //echo "<div>CONDHA PAS OK</div>";
  4609.                                                 $prix $condHa->getPrixAchatNet();
  4610.                                                 if ($condHa->getCoefficientConditionnement() != 0) {
  4611.                                                     $prix $prix $condHa->getCoefficientConditionnement();
  4612.                                                 }
  4613.                                                 $tauxChange  1;
  4614.                                                 $fournisseur $condHa->getFournisseur();
  4615.                                                 if (is_object($fournisseur)) {
  4616.                                                     $devise $fournisseur->getDevise();
  4617.                                                 }
  4618.                                                 if (is_object($devise) && $devise->getTauxChange() != 0) {
  4619.                                                     $tauxChange $devise->getTauxChange();
  4620.                                                 }
  4621.                                                 $prix          $prix $tauxChange//prix d'achat brut converti en euros
  4622.                                                 $cpump_compose $prix;
  4623.                                             }
  4624.                                         }
  4625.                                     } else {
  4626.                                         //echo "<div>PUMP OK</div>";
  4627.                                         $cpump_compose $retour[0]["cpump"];
  4628.                                     }
  4629.                                     if (array_key_exists($retour[$i]["articleId"], $tabPumCompose)) {
  4630.                                         $tabPumCompose[$retour[$i]["articleId"]]["quantite"] += $retour[$i]["quantite"];
  4631.                                         $tabPumCompose[$retour[$i]["articleId"]]["cump"]     += $cpump_compose $retour[$i]["quantite"];
  4632.                                     } else {
  4633.                                         $tabPumCompose[$retour[$i]["articleId"]] = ["quantite" => $retour[$i]["quantite"], "cump" => $cpump_compose $retour[$i]["quantite"]];
  4634.                                     }
  4635.                                 }
  4636.                             }
  4637.                             $cpump_compose 0;
  4638.                             if (count($tabPumCompose) > 0) {
  4639.                                 foreach ($tabPumCompose as $key => $value) {
  4640.                                     if ($value["quantite"] != 0) {
  4641.                                         $cpump_compose += $value["cump"] / $value["quantite"];
  4642.                                     }
  4643.                                 }
  4644.                             }
  4645.                             //print_r($tabPumCompose);
  4646.                             $marge_tmp   = ($quantite_vente $prix_vente) - ($quantite_vente $cpump_compose);
  4647.                             $somme_marge += $marge_tmp;
  4648.                             //echo "<div>X Q(".$quantite_vente.")</div>";
  4649.                             //echo "<div>X PV(".$prix_vente.")</div>";
  4650.                             //echo "<div>X PUMP(".$cpump_compose.")</div><br/><br/>";
  4651.                         }
  4652.                     }
  4653.                     //echo "<div>SOMME BL ".$somme_bl."</div>";
  4654.                     //print_r($tabPumCompose);
  4655.                     $sql "
  4656.                             SELECT
  4657.                             ac.id,
  4658.                             ac.prix_achat,
  4659.                             ac.date_mouvement,
  4660.                             ac.stock as stock,
  4661.                             ac.quantite,
  4662.                             ac.cpump as cpump,
  4663.                             ac.article_id as articleId
  4664.                             FROM `article__mouvement_stock` as ac
  4665.                             LEFT JOIN commerciale__commande as c on ac.commande_id = c.id
  4666.                             LEFT JOIN commerciale__commande as cvirt on ac.commande_virtuel_id = cvirt.id
  4667.                             LEFT JOIN commerciale__commande as f on c.facture_id = f.id
  4668.                             LEFT JOIN commerciale__commande as fvirt on cvirt.facture_id = fvirt.id
  4669.                             LEFT JOIN client__client as u on u.id = c.client_id
  4670.                             LEFT JOIN article__article as ar on ar.id = ac.article_id
  4671.                             ".$join."
  4672.                             WHERE
  4673.                             ac.article_id IN (".$inArticle.")
  4674.                             AND
  4675.                             ac.date_mouvement >= '".$date_debut->format('Y-m-d H:i:s')."' AND ac.date_mouvement <= '".$date_fin->format('Y-m-d H:i:s')."'
  4676.                             AND
  4677.                             (
  4678.                             (
  4679.                                 (
  4680.                                     (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))
  4681.                                     OR
  4682.                                     (cvirt.type_document_commercial_id = ".TypeDocumentCommercial::BL." AND cvirt.statut_commande_id != 25 AND (cvirt.facture_id is NOT NULL and fvirt.statut_commande_id != 23) and ac.commande_virtuel_id is not null)
  4683.                                 )
  4684.                                 OR
  4685.                                 (
  4686.                                     (c.type_document_commercial_id = ".TypeDocumentCommercial::FACTURE." AND c.statut_commande_id != 23)
  4687.                                     OR
  4688.                                     (cvirt.type_document_commercial_id = ".TypeDocumentCommercial::FACTURE." AND cvirt.statut_commande_id != 23 and ac.commande_virtuel_id is not null)
  4689.                                 )
  4690.                                 OR
  4691.                                 (
  4692.                                     (c.type_document_commercial_id = ".TypeDocumentCommercial::AVOIR." AND c.statut_commande_id != 19)
  4693.                                     OR
  4694.                                     (cvirt.type_document_commercial_id = ".TypeDocumentCommercial::AVOIR." AND cvirt.statut_commande_id != 19 and ac.commande_virtuel_id is not null)
  4695.                                 )
  4696.                             )
  4697.                             )
  4698.                             ".$where."
  4699.                         ";
  4700.                     //echo $sql."<br/><hr/>";
  4701.                     $stmt $this->entityManager->getConnection()->prepare($sql);
  4702.                     $retour $stmt->executeQuery()->fetchAllAssociative();
  4703.                     if (count($retour) > 0) {
  4704.                         $quantite_vente 0;
  4705.                         $prix_vente     0;
  4706.                         $cpump_compose  0;
  4707.                         $total_cout 0;
  4708.                         for ($i 0$i count($retour); $i++) {
  4709.                             if ($retour[$i]["articleId"] == $id) {
  4710.                                 //echo "<div>AAA</div>";
  4711.                                 $quantite_vente += $retour[$i]["quantite"];
  4712.                                 $prix_vente     $retour[$i]["prix_achat"];
  4713.                                 $prix_vente     $retour[$i]["cpump"];
  4714.                                 $somme_qte += $retour[$i]["quantite"];
  4715.                                 $somme_ca  += $retour[$i]["quantite"] * $retour[$i]["prix_achat"];
  4716.                                 $total_cout += $retour[$i]["quantite"] * $retour[$i]["cpump"];
  4717.                                 //echo "<div>QQ ".$retour[$i]["quantite"]." CUMP ".$retour[$i]["cpump"]." TOTAL ".$total_cout."</div>";
  4718.                             } elseif (!= 1) {
  4719.                                 //echo "<div>BBB</div>";
  4720.                                 if ($retour[$i]["stock"] <= or $retour[$i]["cpump"] <= 0) {
  4721.                                     //echo "<div>PUMP PAS OK</div>";
  4722.                                     $condHa $repo_condha->findOneBy(["article" => $retour[$i]["articleId"], "defaut" => 1]);
  4723.                                     if (is_object($condHa)) {
  4724.                                         $prix $condHa->getPrixAchatNet();
  4725.                                         if ($condHa->getCoefficientConditionnement() != 0) {
  4726.                                             $prix $prix $condHa->getCoefficientConditionnement();
  4727.                                         }
  4728.                                         $tauxChange  1;
  4729.                                         $fournisseur $condHa->getFournisseur();
  4730.                                         if (is_object($fournisseur)) {
  4731.                                             $devise $fournisseur->getDevise();
  4732.                                         }
  4733.                                         if (is_object($devise) && $devise->getTauxChange() != 0) {
  4734.                                             $tauxChange $devise->getTauxChange();
  4735.                                         }
  4736.                                         $prix $prix $tauxChange//prix d'achat brut converti en euros
  4737.                                         $cpump_compose $prix;
  4738.                                     } else {
  4739.                                         $condHa $repo_condha->findOneBy(["article" => $retour[$i]["articleId"]]);
  4740.                                         if (is_object($condHa)) {
  4741.                                             //echo "<div>CONDHA OK</div>";
  4742.                                             $prix $condHa->getPrixAchatNet();
  4743.                                             if ($condHa->getCoefficientConditionnement() != 0) {
  4744.                                                 $prix $prix $condHa->getCoefficientConditionnement();
  4745.                                             }
  4746.                                             $tauxChange  1;
  4747.                                             $fournisseur $condHa->getFournisseur();
  4748.                                             if (is_object($fournisseur)) {
  4749.                                                 $devise $fournisseur->getDevise();
  4750.                                             }
  4751.                                             if (is_object($devise) && $devise->getTauxChange() != 0) {
  4752.                                                 $tauxChange $devise->getTauxChange();
  4753.                                             }
  4754.                                             $prix          $prix $tauxChange//prix d'achat brut converti en euros
  4755.                                             $cpump_compose $prix;
  4756.                                         }
  4757.                                     }
  4758.                                 } else {
  4759.                                     //echo "<div>PUMP OK</div>";
  4760.                                     $cpump_compose $retour[0]["cpump"];
  4761.                                 }
  4762.                                 if (array_key_exists($retour[$i]["articleId"], $tabPumCompose)) {
  4763.                                     $tabPumCompose[$retour[$i]["articleId"]]["quantite"] += 1;
  4764.                                     $tabPumCompose[$retour[$i]["articleId"]]["cump"]     += $cpump_compose;
  4765.                                 } else {
  4766.                                     $tabPumCompose[$retour[$i]["articleId"]] = ["quantite" => 1"cump" => $cpump_compose];
  4767.                                 }
  4768.                             }
  4769.                         }
  4770.                         $cpump_compose 0;
  4771.                         if (count($tabPumCompose) > 0) {
  4772.                             foreach ($tabPumCompose as $key => $value) {
  4773.                                 if ($value["quantite"] != 0) {
  4774.                                     $cpump_compose += $value["cump"] / $value["quantite"];
  4775.                                 }
  4776.                             }
  4777.                         }
  4778.                         //print_r($tabPumCompose);
  4779.                         $marge_tmp   = ($quantite_vente $prix_vente) - ($quantite_vente $cpump_compose);
  4780.                         $somme_marge += $marge_tmp;
  4781.                         //echo "<div>Z Q(".$quantite_vente.")</div>";
  4782.                         //echo "<div>Z PV(".$prix_vente.")</div>";
  4783.                         //echo "<div>Z PUMP(".$cpump_compose.")</div><br/><br/>";
  4784.                         //echo "<div>somme_marge(".$somme_marge.")</div><br/><br/>";
  4785.                         //echo "<div>total_cout(".$total_cout.")</div><br/><br/>";
  4786.                     }
  4787.                 }
  4788.             } else {
  4789.                 if ($integreBl) {
  4790.                     //POUR LES BL
  4791.                     $sql "
  4792.                         SELECT
  4793.                         ac.prix_achat,
  4794.                         ac.quantite,
  4795.                         ac.id,
  4796.                         ac.date_mouvement,
  4797.                         ac.stock as stock,
  4798.                         ac.cpump as cpump
  4799.                         FROM `article__mouvement_stock` as ac
  4800.                         LEFT JOIN commerciale__commande as c on ".$jointureCommande." = c.id
  4801.                         LEFT JOIN commerciale__commande as f on c.facture_id = f.id
  4802.                         LEFT JOIN client__client as u on u.id = c.client_id
  4803.                         LEFT JOIN article__article as ar on ar.id = ac.article_id
  4804.                         ".$join."
  4805.                         WHERE
  4806.                         ac.article_id IN (".$inArticle.")
  4807.                         AND
  4808.                         ac.date_mouvement >= '".$date_debut->format('Y-m-d H:i:s')."' AND ac.date_mouvement <= '".$date_fin->format('Y-m-d H:i:s')."'
  4809.                         AND
  4810.                         (
  4811.                         ( (c.type_document_commercial_id = ".TypeDocumentCommercial::BL." AND c.statut_commande_id != 25))
  4812.                         )
  4813.                         AND (c.facture_id is NULL or f.statut_commande_id = 23)
  4814.                         ".$where."
  4815.                         ";
  4816.                     //echo "<div>SQL BL ".$sql."</div>";
  4817.                     $stmt $this->entityManager->getConnection()->prepare($sql);
  4818.                     $retour $stmt->executeQuery()->fetchAllAssociative();
  4819.                     if (count($retour) > 0) {
  4820.                         for ($i 0$i count($retour); $i++) {
  4821.                             //if($retour[$i]["stock"]<=0 or $retour[$i]["cpump"] <=0) {
  4822.                             if ($retour[$i]["cpump"] <= 0) {
  4823.                                 //echo "<div>PUMP PAS OK</div>";
  4824.                                 $condHa $repo_condha->findOneBy(["article" => $article"defaut" => 1]);
  4825.                                 if (is_object($condHa)) {
  4826.                                     //echo "<div>CONDHA OK</div>";
  4827.                                     $prix $condHa->getPrixAchatNet();
  4828.                                     if ($condHa->getCoefficientConditionnement() != 0) {
  4829.                                         $prix $prix $condHa->getCoefficientConditionnement();
  4830.                                     }
  4831.                                     $tauxChange  1;
  4832.                                     $fournisseur $condHa->getFournisseur();
  4833.                                     if (is_object($fournisseur)) {
  4834.                                         $devise $fournisseur->getDevise();
  4835.                                     }
  4836.                                     if (is_object($devise) && $devise->getTauxChange() != 0) {
  4837.                                         $tauxChange $devise->getTauxChange();
  4838.                                     }
  4839.                                     $prix $prix $tauxChange//prix d'achat brut converti en euros
  4840.                                     $marge_tmp   = ($retour[$i]["quantite"] * $retour[$i]["prix_achat"]) - ($retour[$i]["quantite"] * $prix);
  4841.                                     $somme_marge += $marge_tmp;
  4842.                                 } else {
  4843.                                     $condHa $repo_condha->findOneBy(["article" => $article]);
  4844.                                     if (is_object($condHa)) {
  4845.                                         //echo "<div>CONDHA OK</div>";
  4846.                                         $prix $condHa->getPrixAchatNet();
  4847.                                         if ($condHa->getCoefficientConditionnement() != 0) {
  4848.                                             $prix $prix $condHa->getCoefficientConditionnement();
  4849.                                         }
  4850.                                         $tauxChange  1;
  4851.                                         $fournisseur $condHa->getFournisseur();
  4852.                                         if (is_object($fournisseur)) {
  4853.                                             $devise $fournisseur->getDevise();
  4854.                                         }
  4855.                                         if (is_object($devise) && $devise->getTauxChange() != 0) {
  4856.                                             $tauxChange $devise->getTauxChange();
  4857.                                         }
  4858.                                         $prix $prix $tauxChange//prix d'achat brut converti en euros
  4859.                                         $marge_tmp   = ($retour[$i]["quantite"] * $retour[$i]["prix_achat"]) - ($retour[$i]["quantite"] * $prix);
  4860.                                         $somme_marge += $marge_tmp;
  4861.                                     }
  4862.                                 }
  4863.                             } else {
  4864.                                 //echo "<div>PUMP OK</div>";
  4865.                                 $marge_tmp   = ($retour[$i]["quantite"] * $retour[$i]["prix_achat"]) - ($retour[$i]["quantite"] * $retour[0]["cpump"]);
  4866.                                 $somme_marge += $marge_tmp;
  4867.                             }
  4868.                             $somme_bl  += $retour[$i]["quantite"] * $retour[$i]["prix_achat"];
  4869.                             $somme_qte += $retour[$i]["quantite"];
  4870.                         }
  4871.                     }
  4872.                 }
  4873.                 //$retourBl = $this->calculStatsSql($sql);
  4874.                 $sql "
  4875.                             SELECT
  4876.                             ac.id,
  4877.                             ac.prix_achat,
  4878.                             ac.date_mouvement,
  4879.                             ac.stock as stock,
  4880.                             ac.quantite,
  4881.                             ac.cpump as cpump
  4882.                             FROM `article__mouvement_stock` as ac
  4883.                             LEFT JOIN commerciale__commande as c on ".$jointureCommande." = c.id
  4884.                             LEFT JOIN commerciale__commande as f on c.facture_id = f.id
  4885.                             LEFT JOIN client__client as u on u.id = c.client_id
  4886.                             LEFT JOIN article__article as ar on ar.id = ac.article_id
  4887.                             ".$join."
  4888.                             WHERE
  4889.                             ac.article_id IN (".$inArticle.")
  4890.                             AND
  4891.                             ac.date_mouvement >= '".$date_debut->format('Y-m-d H:i:s')."' AND ac.date_mouvement <= '".$date_fin->format('Y-m-d H:i:s')."'
  4892.                             AND
  4893.                             (
  4894.                             (  (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))
  4895.                                 OR
  4896.                                 ((c.type_document_commercial_id = ".TypeDocumentCommercial::FACTURE." AND c.statut_commande_id != 23) )
  4897.                                 OR
  4898.                                 (c.type_document_commercial_id = ".TypeDocumentCommercial::AVOIR." AND c.statut_commande_id != 19))
  4899.                             )
  4900.                             ".$where."
  4901.                         ";
  4902.                 //echo $sql."<br/><br/>";
  4903.                 $stmt $this->entityManager->getConnection()->prepare($sql);
  4904.                 $retour $stmt->executeQuery()->fetchAllAssociative();
  4905.                 //echo "<div>TOTAL ".count($retour)."</div>";
  4906.                 if (count($retour) > 0) {
  4907.                     for ($i 0$i count($retour); $i++) {
  4908.                         $sql_mvt_prec 'SELECT mv.cpump,mv.stock,mv.annexe,mv.id,mv.stock as stockMvt,mv.quantite,mv.date_mouvement,mv.cpump,mv.prix_achat as prixAchat,rm.action,rm.id as raison_id
  4909.                                     FROM `article__mouvement_stock` as mv
  4910.                                     LEFT JOIN article__raison_mouvement_stock rm on rm.id = mv.raison_mouvement_stock_id
  4911.                                     where mv.id_import is null
  4912.                                     and mv.date_mouvement <= "'.$retour[$i]["date_mouvement"].'"
  4913.                                     and mv.id < CASE WHEN mv.date_mouvement = "'.$retour[$i]["date_mouvement"].'" THEN '.$retour[$i]["id"].' ELSE 1000000000000000000000000000000 END
  4914.                                     and mv.article_id = '.$article->getId()."
  4915.                                     ORDER BY mv.date_mouvement DESC,id desc
  4916.                                     LIMIT 0,1";
  4917.                         //$output->writeln($sql_mvt_prec);
  4918.                         $mouvement_prec     "";
  4919.                         $stmt_mvt_prec      $this->entityManager->getConnection()->executeQuery($sql_mvt_prec);
  4920.                         $mouvement_prec_tab $stmt_mvt_prec->fetchAllAssociative();
  4921.                         if (count($mouvement_prec_tab) > 0) {
  4922.                             $mouvement_prec $mouvement_prec_tab[0];
  4923.                         }
  4924.                         if ($retour[$i]["cpump"] <= 0) {
  4925.                             //echo "<div>PUMP PAS OK</div>";
  4926.                             $condHa $repo_condha->findOneBy(["article" => $article"defaut" => 1]);
  4927.                             if (is_object($condHa)) {
  4928.                                 //echo "<div>CONDHA OK</div>";
  4929.                                 $prix $condHa->getPrixAchatNet();
  4930.                                 if ($condHa->getCoefficientConditionnement() != 0) {
  4931.                                     $prix $prix $condHa->getCoefficientConditionnement();
  4932.                                 }
  4933.                                 $tauxChange  1;
  4934.                                 $fournisseur $condHa->getFournisseur();
  4935.                                 if (is_object($fournisseur)) {
  4936.                                     $devise $fournisseur->getDevise();
  4937.                                 }
  4938.                                 if (is_object($devise) && $devise->getTauxChange() != 0) {
  4939.                                     $tauxChange $devise->getTauxChange();
  4940.                                 }
  4941.                                 $prix $prix $tauxChange//prix d'achat brut converti en euros
  4942.                                 $marge_tmp   = ($retour[$i]["quantite"] * $retour[$i]["prix_achat"]) - ($retour[$i]["quantite"] * $prix);
  4943.                                 $somme_marge += $marge_tmp;
  4944.                                 //echo "<div>A quantite ".$retour[$i]["quantite"]."</div>";
  4945.                                 //echo "<div>A prix_achat ".$retour[$i]["prix_achat"]."</div>";
  4946.                                 //echo "<div>A cpump ".$retour[$i]["cpump"]." ou ==> ".$prix."</div>";
  4947.                                 //echo "<div><b>A  marge_tmp ".$marge_tmp."</b></div>";
  4948.                                 //echo "<div>A somme_marge ".$somme_marge."<br/><br/></div>";
  4949.                             } else {
  4950.                                 $condHa $repo_condha->findOneBy(["article" => $article]);
  4951.                                 if (is_object($condHa)) {
  4952.                                     //echo "<div>CONDHA OK</div>";
  4953.                                     $prix $condHa->getPrixAchatNet();
  4954.                                     if ($condHa->getCoefficientConditionnement() != 0) {
  4955.                                         $prix $prix $condHa->getCoefficientConditionnement();
  4956.                                     }
  4957.                                     $tauxChange  1;
  4958.                                     $fournisseur $condHa->getFournisseur();
  4959.                                     if (is_object($fournisseur)) {
  4960.                                         $devise $fournisseur->getDevise();
  4961.                                     }
  4962.                                     if (is_object($devise) && $devise->getTauxChange() != 0) {
  4963.                                         $tauxChange $devise->getTauxChange();
  4964.                                     }
  4965.                                     $prix $prix $tauxChange//prix d'achat brut converti en euros
  4966.                                     $marge_tmp   = ($retour[$i]["quantite"] * $retour[$i]["prix_achat"]) - ($retour[$i]["quantite"] * $prix);
  4967.                                     $somme_marge += $marge_tmp;
  4968.                                     //echo "<div>B quantite ".$retour[$i]["quantite"]."</div>";
  4969.                                     //echo "<div>B prix_achat ".$retour[$i]["prix_achat"]."</div>";
  4970.                                     //echo "<div>B cpump ".$retour[$i]["cpump"]." ou ==> ".$prix."</div>";
  4971.                                     //echo "<div><b>B  marge_tmp ".$marge_tmp."</b></div>";
  4972.                                     //echo "<div>B somme_marge ".$somme_marge."<br/><br/></div>";
  4973.                                 }
  4974.                             }
  4975.                         } else {
  4976.                             $marge_tmp "";
  4977.                             //echo "<div>PUMP OK</div>";
  4978.                             if (is_array($mouvement_prec) && array_key_exists('cpump'$mouvement_prec)) {
  4979.                                 // echo "OK";
  4980.                                 $marge_tmp = ($retour[$i]["quantite"] * $retour[$i]["prix_achat"]) - ($retour[$i]["quantite"] * $mouvement_prec["cpump"]);
  4981.                             } else {
  4982.                                 $marge_tmp = ($retour[$i]["quantite"] * $retour[$i]["prix_achat"]) - ($retour[$i]["quantite"] * $retour[$i]["cpump"]);
  4983.                             }
  4984.                             //echo "<div>marge_tmp ".$marge_tmp."</div>";
  4985.                             $somme_marge += $marge_tmp;
  4986.                             //echo "<div>quantite ".$retour[$i]["quantite"]."</div>";
  4987.                             //echo "<div>prix_achat ".$retour[$i]["prix_achat"]."</div>";
  4988.                             //echo "<div>cpump ".$retour[$i]["cpump"]."</div>";
  4989.                             //echo "<div><b>marge_tmp ".$marge_tmp."</b></div>";
  4990.                             //echo "<div>somme_marge ".$somme_marge."<br/><br/></div>";
  4991.                         }
  4992.                         $somme_ca  += $retour[$i]["quantite"] * $retour[$i]["prix_achat"];
  4993.                         $somme_qte += $retour[$i]["quantite"];
  4994.                         //echo "<div>somme_qte ".$somme_qte."</div>";
  4995.                         //echo "<div>somme_ca ".$somme_ca."</div>";
  4996.                         //echo "<div>somme_marge ".$somme_marge."</div>";
  4997.                         //echo "<div>--------------------------------------------</div>";
  4998.                     }
  4999.                 }
  5000.                 //echo "<div>inArticle : ".$inArticle."</div>";
  5001.             }
  5002.             //$retourCa = $this->calculStatsSql($sql);
  5003.             //echo "<div>XXXXsomme_marge ".$somme_marge."<br/><br/></div>";
  5004.             $somme_ca_bl $somme_ca $somme_bl;
  5005.             //echo "<div>CA FINAL ".$somme_ca_bl."</div>";
  5006.             $margePourcent "0";
  5007.             if ($somme_ca_bl 0) {
  5008.                 $margePourcent round($somme_marge 100 $somme_ca_bl2);
  5009.             }
  5010.             $valeurs["quantite"]      = $somme_qte;
  5011.             $valeurs["ca"]            = $somme_ca;
  5012.             $valeurs["bl"]            = $somme_bl;
  5013.             $valeurs["marge"]         = $somme_marge;
  5014.             $valeurs["margePourcent"] = $margePourcent;
  5015.             //print_r($valeurs);
  5016.             //echo "<br/><br/>";
  5017.             return $valeurs;
  5018.         }
  5019.     }
  5020.     public function ____getStatsArticle($id$date_debut ""$date_fin ""$integreBl false)
  5021.     {
  5022.         $article        $this->entityManager->getRepository(Article::class)->find($id);
  5023.         $repo_condha    $this->entityManager->getRepository(ConditionAchat::class);
  5024.         $repo_mouvement $this->entityManager->getRepository(MouvementStock::class);
  5025.         $valeurs                  = [];
  5026.         $valeurs["reference"]     = $article->getReference();
  5027.         $valeurs["libelle"]       = $article->getLibelle();
  5028.         $valeurs["quantite"]      = "";
  5029.         $valeurs["ca"]            = "";
  5030.         $valeurs["bl"]            = "";
  5031.         $valeurs["marge"]         = "";
  5032.         $valeurs["margePourcent"] = "";
  5033.         $somme_marge 0;
  5034.         $somme_ca    0;
  5035.         $somme_bl    0;
  5036.         $somme_qte   0;
  5037.         //echo "<div>TYPE : ".$type."</div>";
  5038.         $inArticle        $id;
  5039.         $jointureCommande "ac.commande_id";
  5040.         if (is_object($article)) {
  5041.             //echo "test";
  5042.             if (is_object($article) && $article->getVirtuel() == true && $article->getProduitInterne() == true) {
  5043.                 //echo "<div>COMPOSE</div>";
  5044.                 $composants    $article->getArticlesComposants();
  5045.                 $nb_composants count($composants);
  5046.                 if (count($composants) > 0) {
  5047.                     $tabPumCompose        = [];
  5048.                     $tabArticleComposants = [];
  5049.                     $inArticle            .= ",";
  5050.                     $jointureCommande     "ac.commande_id";
  5051.                     foreach ($composants as $c) {
  5052.                         $inArticle .= $c->getArticle()->getId().",";
  5053.                     }
  5054.                     $inArticle trim($inArticle",");
  5055.                     if ($integreBl) {
  5056.                         //POUR LES BL
  5057.                         $sql "
  5058.                         SELECT
  5059.                         ac.prix_achat,
  5060.                         ac.quantite,
  5061.                         ac.id,
  5062.                         ac.date_mouvement,
  5063.                         ac.stock as stock,
  5064.                         ac.cpump as cpump,
  5065.                         ac.article_id as articleId
  5066.                         FROM `article__mouvement_stock` as ac
  5067.                         LEFT JOIN commerciale__commande as c on ac.commande_id = c.id
  5068.                         LEFT JOIN commerciale__commande as cvirt on ac.commande_virtuel_id = cvirt.id
  5069.                         LEFT JOIN commerciale__commande as f on c.facture_id = f.id
  5070.                         LEFT JOIN commerciale__commande as fvirt on cvirt.facture_id = fvirt.id
  5071.                         LEFT JOIN client__client as u on u.id = c.client_id
  5072.                         LEFT JOIN article__article as ar on ar.id = ac.article_id
  5073.                         WHERE
  5074.                         ac.article_id IN (".$inArticle.")
  5075.                         AND
  5076.                         ac.date_mouvement >= '".$date_debut->format('Y-m-d H:i:s')."' AND ac.date_mouvement <= '".$date_fin->format('Y-m-d H:i:s')."'
  5077.                         AND
  5078.                         (
  5079.                             (
  5080.                                 (c.type_document_commercial_id = ".TypeDocumentCommercial::BL." AND c.statut_commande_id != 25)
  5081.                                 OR
  5082.                                 (cvirt.type_document_commercial_id = ".TypeDocumentCommercial::BL." AND cvirt.statut_commande_id != 25 and ac.commande_virtuel_id is not null)
  5083.                             )
  5084.                         )
  5085.                         AND
  5086.                         (
  5087.                             (c.facture_id is NULL or f.statut_commande_id = 23)
  5088.                             OR
  5089.                             ((cvirt.facture_id is NULL or fvirt.statut_commande_id = 23) and ac.commande_virtuel_id is not null)
  5090.                         )
  5091.                         ";
  5092.                         //echo $sql;
  5093.                         $stmt $this->entityManager->getConnection()->prepare($sql);
  5094.                         $retour $stmt->executeQuery()->fetchAllAssociative();
  5095.                         if (count($retour) > 0) {
  5096.                             $quantite_vente 0;
  5097.                             $prix_vente     0;
  5098.                             $cpump_compose  0;
  5099.                             for ($i 0$i count($retour); $i++) {
  5100.                                 //echo "<div><br/>AAAA ===> ".$retour[$i]["articleId"]."</div>";
  5101.                                 if ($retour[$i]["articleId"] == $id) {
  5102.                                     //   echo "<div>RRRRR ===> ".$retour[$i]["articleId"]."</div>";
  5103.                                     $quantite_vente += $retour[$i]["quantite"];
  5104.                                     $prix_vente     $retour[$i]["prix_achat"];
  5105.                                     $somme_qte += $retour[$i]["quantite"];
  5106.                                     $somme_bl  += $retour[$i]["quantite"] * $retour[$i]["prix_achat"];
  5107.                                 } else {
  5108.                                     //echo "<div>WWWW ===> ".$retour[$i]["articleId"]."</div>";
  5109.                                     if ($retour[$i]["stock"] <= or $retour[$i]["cpump"] <= 0) {
  5110.                                         //echo "<div>PUMP PAS OK</div>";
  5111.                                         $condHa $repo_condha->findOneBy(["article" => $retour[$i]["articleId"], "defaut" => 1]);
  5112.                                         if (is_object($condHa)) {
  5113.                                             //echo "<div>CONDHA OK</div>";
  5114.                                             $prix $condHa->getPrixAchatNet();
  5115.                                             if ($condHa->getCoefficientConditionnement() != 0) {
  5116.                                                 $prix $prix $condHa->getCoefficientConditionnement();
  5117.                                             }
  5118.                                             $tauxChange  1;
  5119.                                             $fournisseur $condHa->getFournisseur();
  5120.                                             if (is_object($fournisseur)) {
  5121.                                                 $devise $fournisseur->getDevise();
  5122.                                             }
  5123.                                             if (is_object($devise) && $devise->getTauxChange() != 0) {
  5124.                                                 $tauxChange $devise->getTauxChange();
  5125.                                             }
  5126.                                             $prix          $prix $tauxChange//prix d'achat brut converti en euros
  5127.                                             $cpump_compose $prix;
  5128.                                             //echo "<div>PRIX CHA: ".$prix."</div>";
  5129.                                         } else {
  5130.                                             $condHa $repo_condha->findOneBy(["article" => $retour[$i]["articleId"]]);
  5131.                                             if (is_object($condHa)) {
  5132.                                                 //echo "<div>CONDHA PAS OK</div>";
  5133.                                                 $prix $condHa->getPrixAchatNet();
  5134.                                                 if ($condHa->getCoefficientConditionnement() != 0) {
  5135.                                                     $prix $prix $condHa->getCoefficientConditionnement();
  5136.                                                 }
  5137.                                                 $tauxChange  1;
  5138.                                                 $fournisseur $condHa->getFournisseur();
  5139.                                                 if (is_object($fournisseur)) {
  5140.                                                     $devise $fournisseur->getDevise();
  5141.                                                 }
  5142.                                                 if (is_object($devise) && $devise->getTauxChange() != 0) {
  5143.                                                     $tauxChange $devise->getTauxChange();
  5144.                                                 }
  5145.                                                 $prix          $prix $tauxChange//prix d'achat brut converti en euros
  5146.                                                 $cpump_compose $prix;
  5147.                                             }
  5148.                                         }
  5149.                                     } else {
  5150.                                         //echo "<div>PUMP OK</div>";
  5151.                                         $cpump_compose $retour[0]["cpump"];
  5152.                                     }
  5153.                                     if (array_key_exists($retour[$i]["articleId"], $tabPumCompose)) {
  5154.                                         $tabPumCompose[$retour[$i]["articleId"]]["quantite"] += $retour[$i]["quantite"];
  5155.                                         $tabPumCompose[$retour[$i]["articleId"]]["cump"]     += $cpump_compose $retour[$i]["quantite"];
  5156.                                     } else {
  5157.                                         $tabPumCompose[$retour[$i]["articleId"]] = ["quantite" => $retour[$i]["quantite"], "cump" => $cpump_compose $retour[$i]["quantite"]];
  5158.                                     }
  5159.                                 }
  5160.                             }
  5161.                             $cpump_compose 0;
  5162.                             if (count($tabPumCompose) > 0) {
  5163.                                 foreach ($tabPumCompose as $key => $value) {
  5164.                                     if ($value["quantite"] != 0) {
  5165.                                         $cpump_compose += $value["cump"] / $value["quantite"];
  5166.                                     }
  5167.                                 }
  5168.                             }
  5169.                             //print_r($tabPumCompose);
  5170.                             $marge_tmp   = ($quantite_vente $prix_vente) - ($quantite_vente $cpump_compose);
  5171.                             $somme_marge += $marge_tmp;
  5172.                             //echo "<div>X Q(".$quantite_vente.")</div>";
  5173.                             //echo "<div>X PV(".$prix_vente.")</div>";
  5174.                             //echo "<div>X PUMP(".$cpump_compose.")</div><br/><br/>";
  5175.                         }
  5176.                     }
  5177.                     //echo "<div>SOMME BL ".$somme_bl."</div>";
  5178.                     //print_r($tabPumCompose);
  5179.                     $sql "
  5180.                             SELECT
  5181.                             ac.id,
  5182.                             ac.prix_achat,
  5183.                             ac.date_mouvement,
  5184.                             ac.stock as stock,
  5185.                             ac.quantite,
  5186.                             ac.cpump as cpump,
  5187.                             ac.article_id as articleId
  5188.                             FROM `article__mouvement_stock` as ac
  5189.                             LEFT JOIN commerciale__commande as c on ac.commande_id = c.id
  5190.                             LEFT JOIN commerciale__commande as cvirt on ac.commande_virtuel_id = cvirt.id
  5191.                             LEFT JOIN commerciale__commande as f on c.facture_id = f.id
  5192.                             LEFT JOIN commerciale__commande as fvirt on cvirt.facture_id = fvirt.id
  5193.                             LEFT JOIN client__client as u on u.id = c.client_id
  5194.                             LEFT JOIN article__article as ar on ar.id = ac.article_id
  5195.                             WHERE
  5196.                             ac.article_id IN (".$inArticle.")
  5197.                             AND
  5198.                             ac.date_mouvement >= '".$date_debut->format('Y-m-d H:i:s')."' AND ac.date_mouvement <= '".$date_fin->format('Y-m-d H:i:s')."'
  5199.                             AND
  5200.                             (
  5201.                             (
  5202.                                 (
  5203.                                     (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))
  5204.                                     OR
  5205.                                     (cvirt.type_document_commercial_id = ".TypeDocumentCommercial::BL." AND cvirt.statut_commande_id != 25 AND (cvirt.facture_id is NOT NULL and fvirt.statut_commande_id != 23) and ac.commande_virtuel_id is not null)
  5206.                                 )
  5207.                                 OR
  5208.                                 (
  5209.                                     (c.type_document_commercial_id = ".TypeDocumentCommercial::FACTURE." AND c.statut_commande_id != 23)
  5210.                                     OR
  5211.                                     (cvirt.type_document_commercial_id = ".TypeDocumentCommercial::FACTURE." AND cvirt.statut_commande_id != 23 and ac.commande_virtuel_id is not null)
  5212.                                 )
  5213.                                 OR
  5214.                                 (
  5215.                                     (c.type_document_commercial_id = ".TypeDocumentCommercial::AVOIR." AND c.statut_commande_id != 19)
  5216.                                     OR
  5217.                                     (cvirt.type_document_commercial_id = ".TypeDocumentCommercial::AVOIR." AND cvirt.statut_commande_id != 19 and ac.commande_virtuel_id is not null)
  5218.                                 )
  5219.                             )
  5220.                             )
  5221.                         ";
  5222.                     //echo $sql;
  5223.                     $stmt $this->entityManager->getConnection()->prepare($sql);
  5224.                     $retour $stmt->executeQuery()->fetchAllAssociative();
  5225.                     if (count($retour) > 0) {
  5226.                         $quantite_vente 0;
  5227.                         $prix_vente     0;
  5228.                         $cpump_compose  0;
  5229.                         for ($i 0$i count($retour); $i++) {
  5230.                             if ($retour[$i]["articleId"] == $id) {
  5231.                                 $quantite_vente += $retour[$i]["quantite"];
  5232.                                 $prix_vente     $retour[$i]["prix_achat"];
  5233.                                 $somme_qte += $retour[$i]["quantite"];
  5234.                                 $somme_ca  += $retour[$i]["quantite"] * $retour[$i]["prix_achat"];
  5235.                             } else {
  5236.                                 if ($retour[$i]["stock"] <= or $retour[$i]["cpump"] <= 0) {
  5237.                                     //echo "<div>PUMP PAS OK</div>";
  5238.                                     $condHa $repo_condha->findOneBy(["article" => $retour[$i]["articleId"], "defaut" => 1]);
  5239.                                     if (is_object($condHa)) {
  5240.                                         $prix $condHa->getPrixAchatNet();
  5241.                                         if ($condHa->getCoefficientConditionnement() != 0) {
  5242.                                             $prix $prix $condHa->getCoefficientConditionnement();
  5243.                                         }
  5244.                                         $tauxChange  1;
  5245.                                         $fournisseur $condHa->getFournisseur();
  5246.                                         if (is_object($fournisseur)) {
  5247.                                             $devise $fournisseur->getDevise();
  5248.                                         }
  5249.                                         if (is_object($devise) && $devise->getTauxChange() != 0) {
  5250.                                             $tauxChange $devise->getTauxChange();
  5251.                                         }
  5252.                                         $prix $prix $tauxChange//prix d'achat brut converti en euros
  5253.                                         $cpump_compose $prix;
  5254.                                     } else {
  5255.                                         $condHa $repo_condha->findOneBy(["article" => $retour[$i]["articleId"]]);
  5256.                                         if (is_object($condHa)) {
  5257.                                             //echo "<div>CONDHA OK</div>";
  5258.                                             $prix $condHa->getPrixAchatNet();
  5259.                                             if ($condHa->getCoefficientConditionnement() != 0) {
  5260.                                                 $prix $prix $condHa->getCoefficientConditionnement();
  5261.                                             }
  5262.                                             $tauxChange  1;
  5263.                                             $fournisseur $condHa->getFournisseur();
  5264.                                             if (is_object($fournisseur)) {
  5265.                                                 $devise $fournisseur->getDevise();
  5266.                                             }
  5267.                                             if (is_object($devise) && $devise->getTauxChange() != 0) {
  5268.                                                 $tauxChange $devise->getTauxChange();
  5269.                                             }
  5270.                                             $prix          $prix $tauxChange//prix d'achat brut converti en euros
  5271.                                             $cpump_compose $prix;
  5272.                                         }
  5273.                                     }
  5274.                                 } else {
  5275.                                     //echo "<div>PUMP OK</div>";
  5276.                                     $cpump_compose $retour[0]["cpump"];
  5277.                                 }
  5278.                                 if (array_key_exists($retour[$i]["articleId"], $tabPumCompose)) {
  5279.                                     $tabPumCompose[$retour[$i]["articleId"]]["quantite"] += 1;
  5280.                                     $tabPumCompose[$retour[$i]["articleId"]]["cump"]     += $cpump_compose;
  5281.                                 } else {
  5282.                                     $tabPumCompose[$retour[$i]["articleId"]] = ["quantite" => 1"cump" => $cpump_compose];
  5283.                                 }
  5284.                             }
  5285.                         }
  5286.                         $cpump_compose 0;
  5287.                         if (count($tabPumCompose) > 0) {
  5288.                             foreach ($tabPumCompose as $key => $value) {
  5289.                                 if ($value["quantite"] != 0) {
  5290.                                     $cpump_compose += $value["cump"] / $value["quantite"];
  5291.                                 }
  5292.                             }
  5293.                         }
  5294.                         //print_r($tabPumCompose);
  5295.                         $marge_tmp   = ($quantite_vente $prix_vente) - ($quantite_vente $cpump_compose);
  5296.                         $somme_marge += $marge_tmp;
  5297.                         //echo "<div>Z Q(".$quantite_vente.")</div>";
  5298.                         //echo "<div>Z PV(".$prix_vente.")</div>";
  5299.                         //echo "<div>Z PUMP(".$cpump_compose.")</div><br/><br/>";
  5300.                     }
  5301.                 }
  5302.             } else {
  5303.                 if ($integreBl) {
  5304.                     //POUR LES BL
  5305.                     $sql "
  5306.                         SELECT
  5307.                         ac.prix_achat,
  5308.                         ac.quantite,
  5309.                         ac.id,
  5310.                         ac.date_mouvement,
  5311.                         ac.stock as stock,
  5312.                         ac.cpump as cpump
  5313.                         FROM `article__mouvement_stock` as ac
  5314.                         LEFT JOIN commerciale__commande as c on ".$jointureCommande." = c.id
  5315.                         LEFT JOIN commerciale__commande as f on c.facture_id = f.id
  5316.                         LEFT JOIN client__client as u on u.id = c.client_id
  5317.                         LEFT JOIN article__article as ar on ar.id = ac.article_id
  5318.                         WHERE
  5319.                         ac.article_id IN (".$inArticle.")
  5320.                         AND
  5321.                         ac.date_mouvement >= '".$date_debut->format('Y-m-d H:i:s')."' AND ac.date_mouvement <= '".$date_fin->format('Y-m-d H:i:s')."'
  5322.                         AND
  5323.                         (
  5324.                         ( (c.type_document_commercial_id = ".TypeDocumentCommercial::BL." AND c.statut_commande_id != 25))
  5325.                         )
  5326.                         AND (c.facture_id is NULL or f.statut_commande_id = 23)
  5327.                         ";
  5328.                     //echo "<div>SQL BL ".$sql."</div>";
  5329.                     $stmt $this->entityManager->getConnection()->prepare($sql);
  5330.                     $retour $stmt->executeQuery()->fetchAllAssociative();
  5331.                     if (count($retour) > 0) {
  5332.                         for ($i 0$i count($retour); $i++) {
  5333.                             if ($retour[$i]["stock"] <= or $retour[$i]["cpump"] <= 0) {
  5334.                                 //echo "<div>PUMP PAS OK</div>";
  5335.                                 $condHa $repo_condha->findOneBy(["article" => $article"defaut" => 1]);
  5336.                                 if (is_object($condHa)) {
  5337.                                     //echo "<div>CONDHA OK</div>";
  5338.                                     $prix $condHa->getPrixAchatNet();
  5339.                                     if ($condHa->getCoefficientConditionnement() != 0) {
  5340.                                         $prix $prix $condHa->getCoefficientConditionnement();
  5341.                                     }
  5342.                                     $tauxChange  1;
  5343.                                     $fournisseur $condHa->getFournisseur();
  5344.                                     if (is_object($fournisseur)) {
  5345.                                         $devise $fournisseur->getDevise();
  5346.                                     }
  5347.                                     if (is_object($devise) && $devise->getTauxChange() != 0) {
  5348.                                         $tauxChange $devise->getTauxChange();
  5349.                                     }
  5350.                                     $prix $prix $tauxChange//prix d'achat brut converti en euros
  5351.                                     $marge_tmp   = ($retour[$i]["quantite"] * $retour[$i]["prix_achat"]) - ($retour[$i]["quantite"] * $prix);
  5352.                                     $somme_marge += $marge_tmp;
  5353.                                 } else {
  5354.                                     $condHa $repo_condha->findOneBy(["article" => $article]);
  5355.                                     if (is_object($condHa)) {
  5356.                                         //echo "<div>CONDHA OK</div>";
  5357.                                         $prix $condHa->getPrixAchatNet();
  5358.                                         if ($condHa->getCoefficientConditionnement() != 0) {
  5359.                                             $prix $prix $condHa->getCoefficientConditionnement();
  5360.                                         }
  5361.                                         $tauxChange  1;
  5362.                                         $fournisseur $condHa->getFournisseur();
  5363.                                         if (is_object($fournisseur)) {
  5364.                                             $devise $fournisseur->getDevise();
  5365.                                         }
  5366.                                         if (is_object($devise) && $devise->getTauxChange() != 0) {
  5367.                                             $tauxChange $devise->getTauxChange();
  5368.                                         }
  5369.                                         $prix $prix $tauxChange//prix d'achat brut converti en euros
  5370.                                         $marge_tmp   = ($retour[$i]["quantite"] * $retour[$i]["prix_achat"]) - ($retour[$i]["quantite"] * $prix);
  5371.                                         $somme_marge += $marge_tmp;
  5372.                                     }
  5373.                                 }
  5374.                             } else {
  5375.                                 //echo "<div>PUMP OK</div>";
  5376.                                 $marge_tmp   = ($retour[$i]["quantite"] * $retour[$i]["prix_achat"]) - ($retour[$i]["quantite"] * $retour[0]["cpump"]);
  5377.                                 $somme_marge += $marge_tmp;
  5378.                             }
  5379.                             $somme_bl  += $retour[$i]["quantite"] * $retour[$i]["prix_achat"];
  5380.                             $somme_qte += $retour[$i]["quantite"];
  5381.                         }
  5382.                     }
  5383.                 }
  5384.                 //$retourBl = $this->calculStatsSql($sql);
  5385.                 $sql "
  5386.                             SELECT
  5387.                             ac.id,
  5388.                             ac.prix_achat,
  5389.                             ac.date_mouvement,
  5390.                             ac.stock as stock,
  5391.                             ac.quantite,
  5392.                             ac.cpump as cpump
  5393.                             FROM `article__mouvement_stock` as ac
  5394.                             LEFT JOIN commerciale__commande as c on ".$jointureCommande." = c.id
  5395.                             LEFT JOIN commerciale__commande as f on c.facture_id = f.id
  5396.                             LEFT JOIN client__client as u on u.id = c.client_id
  5397.                             LEFT JOIN article__article as ar on ar.id = ac.article_id
  5398.                             WHERE
  5399.                             ac.article_id IN (".$inArticle.")
  5400.                             AND
  5401.                             ac.date_mouvement >= '".$date_debut->format('Y-m-d H:i:s')."' AND ac.date_mouvement <= '".$date_fin->format('Y-m-d H:i:s')."'
  5402.                             AND
  5403.                             (
  5404.                             (  (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))
  5405.                                 OR
  5406.                                 ((c.type_document_commercial_id = ".TypeDocumentCommercial::FACTURE." AND c.statut_commande_id != 23) )
  5407.                                 OR
  5408.                                 (c.type_document_commercial_id = ".TypeDocumentCommercial::AVOIR." AND c.statut_commande_id != 19))
  5409.                             )
  5410.                         ";
  5411.                 $stmt $this->entityManager->getConnection()->prepare($sql);
  5412.                 $retour $stmt->executeQuery()->fetchAllAssociative();
  5413.                 if (count($retour) > 0) {
  5414.                     for ($i 0$i count($retour); $i++) {
  5415.                         if ($retour[$i]["cpump"] <= 0) {
  5416.                             //echo "<div>PUMP PAS OK</div>";
  5417.                             $condHa $repo_condha->findOneBy(["article" => $article"defaut" => 1]);
  5418.                             if (is_object($condHa)) {
  5419.                                 //echo "<div>CONDHA OK</div>";
  5420.                                 $prix $condHa->getPrixAchatNet();
  5421.                                 if ($condHa->getCoefficientConditionnement() != 0) {
  5422.                                     $prix $prix $condHa->getCoefficientConditionnement();
  5423.                                 }
  5424.                                 $tauxChange  1;
  5425.                                 $fournisseur $condHa->getFournisseur();
  5426.                                 if (is_object($fournisseur)) {
  5427.                                     $devise $fournisseur->getDevise();
  5428.                                 }
  5429.                                 if (is_object($devise) && $devise->getTauxChange() != 0) {
  5430.                                     $tauxChange $devise->getTauxChange();
  5431.                                 }
  5432.                                 $prix $prix $tauxChange//prix d'achat brut converti en euros
  5433.                                 $marge_tmp   = ($retour[$i]["quantite"] * $retour[$i]["prix_achat"]) - ($retour[$i]["quantite"] * $prix);
  5434.                                 $somme_marge += $marge_tmp;
  5435.                                 //echo "<div>A quantite ".$retour[$i]["quantite"]."</div>";
  5436.                                 //echo "<div>A prix_achat ".$retour[$i]["prix_achat"]."</div>";
  5437.                                 //echo "<div>A cpump ".$retour[$i]["cpump"]." ou ==> ".$prix."</div>";
  5438.                                 //echo "<div><b>A  marge_tmp ".$marge_tmp."</b></div>";
  5439.                                 //echo "<div>A somme_marge ".$somme_marge."<br/><br/></div>";
  5440.                             } else {
  5441.                                 $condHa $repo_condha->findOneBy(["article" => $article]);
  5442.                                 if (is_object($condHa)) {
  5443.                                     //echo "<div>CONDHA OK</div>";
  5444.                                     $prix $condHa->getPrixAchatNet();
  5445.                                     if ($condHa->getCoefficientConditionnement() != 0) {
  5446.                                         $prix $prix $condHa->getCoefficientConditionnement();
  5447.                                     }
  5448.                                     $tauxChange  1;
  5449.                                     $fournisseur $condHa->getFournisseur();
  5450.                                     if (is_object($fournisseur)) {
  5451.                                         $devise $fournisseur->getDevise();
  5452.                                     }
  5453.                                     if (is_object($devise) && $devise->getTauxChange() != 0) {
  5454.                                         $tauxChange $devise->getTauxChange();
  5455.                                     }
  5456.                                     $prix $prix $tauxChange//prix d'achat brut converti en euros
  5457.                                     $marge_tmp   = ($retour[$i]["quantite"] * $retour[$i]["prix_achat"]) - ($retour[$i]["quantite"] * $prix);
  5458.                                     $somme_marge += $marge_tmp;
  5459.                                     //echo "<div>B quantite ".$retour[$i]["quantite"]."</div>";
  5460.                                     //echo "<div>B prix_achat ".$retour[$i]["prix_achat"]."</div>";
  5461.                                     //echo "<div>B cpump ".$retour[$i]["cpump"]." ou ==> ".$prix."</div>";
  5462.                                     //echo "<div><b>B  marge_tmp ".$marge_tmp."</b></div>";
  5463.                                     //echo "<div>B somme_marge ".$somme_marge."<br/><br/></div>";
  5464.                                 }
  5465.                             }
  5466.                         } else {
  5467.                             $marge_tmp "";
  5468.                             //echo "<div>PUMP OK</div>";
  5469.                             $marge_tmp   = ($retour[$i]["quantite"] * $retour[$i]["prix_achat"]) - ($retour[$i]["quantite"] * $retour[$i]["cpump"]);
  5470.                             $somme_marge += $marge_tmp;
  5471.                             //echo "<div>quantite ".$retour[$i]["quantite"]."</div>";
  5472.                             //echo "<div>prix_achat ".$retour[$i]["prix_achat"]."</div>";
  5473.                             //echo "<div>cpump ".$retour[$i]["cpump"]."</div>";
  5474.                             //echo "<div><b>marge_tmp ".$marge_tmp."</b></div>";
  5475.                             //echo "<div>somme_marge ".$somme_marge."<br/><br/></div>";
  5476.                         }
  5477.                         $somme_ca  += $retour[$i]["quantite"] * $retour[$i]["prix_achat"];
  5478.                         $somme_qte += $retour[$i]["quantite"];
  5479.                     }
  5480.                 }
  5481.                 //echo "<div>inArticle : ".$inArticle."</div>";
  5482.             }
  5483.             //$retourCa = $this->calculStatsSql($sql);
  5484.             //echo "<div>XXXXsomme_marge ".$somme_marge."<br/><br/></div>";
  5485.             $somme_ca_bl $somme_ca $somme_bl;
  5486.             //echo "<div>CA FINAL ".$somme_ca_bl."</div>";
  5487.             $margePourcent "0";
  5488.             if ($somme_ca_bl 0) {
  5489.                 $margePourcent round($somme_marge 100 $somme_ca_bl2);
  5490.             }
  5491.             $valeurs["quantite"]      = $somme_qte;
  5492.             $valeurs["ca"]            = $somme_ca;
  5493.             $valeurs["bl"]            = $somme_bl;
  5494.             $valeurs["marge"]         = $somme_marge;
  5495.             $valeurs["margePourcent"] = $margePourcent;
  5496.             return $valeurs;
  5497.         }
  5498.     }
  5499.     public function calculStatsSql($sql "")
  5500.     {
  5501.         $valeur             = [];
  5502.         $compteur_mouvement 0;
  5503.         $somme_pump         0;
  5504.         $stmt               $this->entityManager->getConnection()->prepare($sql);
  5505.         $retour $stmt->executeQuery()->fetchAllAssociative();
  5506.         if (count($retour) > 0) {
  5507.             for ($i 0$i count($retour); $i++) {
  5508.                 if ($retour[$i]["stock"] <= or $retour[$i]["cpump"] <= 0) {
  5509.                     //echo "<div>PUMP PAS OK</div>";
  5510.                     $condHa $repo_condha->findOneBy(["article" => $article"defaut" => 1]);
  5511.                     if (is_object($condHa)) {
  5512.                         //echo "<div>CONDHA OK</div>";
  5513.                         $prix $condHa->getPrixAchatNet();
  5514.                         if ($condHa->getCoefficientConditionnement() != 0) {
  5515.                             $prix $prix $condHa->getCoefficientConditionnement();
  5516.                         }
  5517.                         $tauxChange  1;
  5518.                         $fournisseur $condHa->getFournisseur();
  5519.                         if (is_object($fournisseur)) {
  5520.                             $devise $fournisseur->getDevise();
  5521.                         }
  5522.                         if (is_object($devise) && $devise->getTauxChange() != 0) {
  5523.                             $tauxChange $devise->getTauxChange();
  5524.                         }
  5525.                         $prix $prix $tauxChange//prix d'achat brut converti en euros
  5526.                         $compteur_mouvement++;
  5527.                         //echo "<div>PRIX ".$prix."</div>";
  5528.                         $somme_pump $somme_pump $prix;
  5529.                     } else {
  5530.                         $condHa $repo_condha->findOneBy(["article" => $article]);
  5531.                         if (is_object($condHa)) {
  5532.                             //echo "<div>CONDHA OK</div>";
  5533.                             $prix $condHa->getPrixAchatNet();
  5534.                             if ($condHa->getCoefficientConditionnement() != 0) {
  5535.                                 $prix $prix $condHa->getCoefficientConditionnement();
  5536.                             }
  5537.                             $tauxChange  1;
  5538.                             $fournisseur $condHa->getFournisseur();
  5539.                             if (is_object($fournisseur)) {
  5540.                                 $devise $fournisseur->getDevise();
  5541.                             }
  5542.                             if (is_object($devise) && $devise->getTauxChange() != 0) {
  5543.                                 $tauxChange $devise->getTauxChange();
  5544.                             }
  5545.                             $prix $prix $tauxChange//prix d'achat brut converti en euros
  5546.                             $compteur_mouvement++;
  5547.                             //echo "<div>PRIX ".$prix."</div>";
  5548.                             $somme_pump $somme_pump $prix;
  5549.                         }
  5550.                     }
  5551.                 } else {
  5552.                     //echo "<div>PUMP OK</div>";
  5553.                     $compteur_mouvement++;
  5554.                     $somme_pump $somme_pump $retour[0]["cpump"];
  5555.                 }
  5556.             }
  5557.         }
  5558.         if ($compteur_mouvement 0) {
  5559.             $somme_pump $somme_pump $compteur_mouvement;
  5560.         }
  5561.     }
  5562.     public function getQtePriorisee($ac)
  5563.     {
  5564.         $repo_article_commande $this->entityManager->getRepository(ArticleCommande::class);
  5565.         //$dispo = $ac->getArticle()->getStock();
  5566.         $bps  = [];
  5567.         $cmds = [];
  5568.         if (is_object($ac)) {
  5569.             $article $ac->getArticle();
  5570.         } else {
  5571.             $article $ac['article'];
  5572.         }
  5573.         $dispo $article->getStock();
  5574.         $date null;
  5575.         if (is_object($ac) && is_object($ac->getDatePriorisation())) {
  5576.             $date $ac->getDatePriorisation();
  5577.         }
  5578.         /*
  5579.         else if(!is_object($ac) && isset($ac['commande']) && is_object($ac['commande'])) {
  5580.             $date = $ac['commande']->getDate();
  5581.         } else if(is_object($ac)) {
  5582.             $date = $ac->getCommande()->getDate();
  5583.         } else {
  5584.             $date = NULL;
  5585.         }
  5586.          *
  5587.          */
  5588.         $qtesPriorisees $repo_article_commande->getQtesPriorisees($article$date)->getQuery()->getResult();
  5589.         if (count($qtesPriorisees) > 0) {
  5590.             foreach ($qtesPriorisees as $qtePriorisee) {
  5591.                 if (in_array($qtePriorisee->getCommande()->getTypeDocumentCommercial(), [TypeDocumentCommercial::BPTypeDocumentCommercial::BPATELIER])) {
  5592.                     $bps[] = $qtePriorisee;
  5593.                 } else {
  5594.                     $cmds[] = $qtePriorisee;
  5595.                 }
  5596.                 $dispo -= $qtePriorisee->getQuantiteDispo();
  5597.                 //echo $qtePriorisee->getCommande()->getReference().' ,';
  5598.             }
  5599.         }
  5600.         return ['dispo' => $dispo"bps" => $bps'cmds' => $cmds];
  5601.     }
  5602.     public function getPrixCondHaCompose(Article $articleCompose)
  5603.     {
  5604.         $prix 0;
  5605.         foreach ($articleCompose->getArticlesComposants() as $articleComposant) {
  5606.             $prix += $this->majCondHaComposeGetInfosComposants($articleComposant'', [], $eviterBoucleInfinie 0);
  5607.         }
  5608.         return round($prix3);
  5609.     }
  5610.     private function majCondHaComposeGetInfosComposants($articleComposant$niveau$idMaj$eviterBoucleInfinie)
  5611.     {
  5612.         if ($eviterBoucleInfinie 1000) {
  5613.             return false;
  5614.         } else {
  5615.             $eviterBoucleInfinie++;
  5616.         }
  5617.         $niveau  .= '-';
  5618.         $article $articleComposant->getArticle();
  5619.         $repo_fournisseur $this->entityManager->getRepository(Fournisseur::class);
  5620.         $fournisseur_dtc  $repo_fournisseur->findOneBy(['reference' => 12000]);
  5621.         $repo_cond_ha $this->entityManager->getRepository(ConditionAchat::class);
  5622.         if ($article->getProduitInterne() == && count($article->getArticlesComposants()) && == 0) {
  5623.             $prix 0;
  5624.             foreach ($article->getArticlesComposants() as $composant) {
  5625.                 $prixTmp $this->majCondHaComposeGetInfosComposants($composant$niveau$idMaj$eviterBoucleInfinie);
  5626.                 $prix    += floatVal($prixTmp);
  5627.             }
  5628.         } else {
  5629. //                $condHa = $repo_cond_ha->findOneBy(array("fournisseur"=>$fournisseur_dtc,"article"=>$article));
  5630. //                if(!is_object($condHa))
  5631. //                    $condHa = $repo_cond_ha->findOneBy(array("article"=>$article,"defaut"=>1));
  5632.             $condHa $repo_cond_ha->findOneBy(["article" => $article"defaut" => 1]);
  5633.             if (is_object($condHa)) {
  5634.                 $prix $condHa->getPrixAchatNet();
  5635.                 //coefficientConditionnement
  5636.                 if ($condHa->getCoefficientConditionnement() != 0) {
  5637.                     $prix $prix $condHa->getCoefficientConditionnement();
  5638.                 }
  5639.                 //devise
  5640.                 $fournisseur $condHa->getFournisseur();
  5641.                 if (is_object($fournisseur)) {
  5642.                     $devise $fournisseur->getDevise();
  5643.                     if (is_object($devise) && $devise->getTauxChange() != 0) {
  5644.                         $tauxChange $devise->getTauxChange();
  5645.                         $prix       $prix $tauxChange//prix d'achat brut converti en euros
  5646.                     }
  5647.                 }
  5648.             } else {
  5649.                 $prix $article->getPrixBase();
  5650.             }
  5651.         }
  5652.         $prix $prix $articleComposant->getQuantite();
  5653.         $prix round($prix3);
  5654.         return $prix;
  5655.     }
  5656.     public function getConditionAchatParDefaut(Article $article)
  5657.     {
  5658.         $repo_condha $this->entityManager->getRepository(ConditionAchat::class);
  5659.         $condHa      $repo_condha->findOneBy(["article" => $article"defaut" => 1]);
  5660.         return $condHa;
  5661.     }
  5662.     public function getNbNumeroSerieByArticle($articleId)
  5663.     {
  5664.         return $this->entityManager->getRepository(NumeroSerie::class)->getNbNumeroSerieByArticle($articleId);
  5665.     }
  5666.     public function nbApplicationsEnfants(Article $article$type ""$id)
  5667.     {
  5668.         $repo_applications $this->entityManager->getRepository(Application::class);
  5669.         $total             "";
  5670.         if ($type == "marque" && $id != "") {
  5671.             $total $repo_applications->totalApplicationEnfantsMarquesArticle($article$id);
  5672.         } elseif ($type == "modele" && $id != "") {
  5673.             $total $repo_applications->totalApplicationEnfantsModelesArticle($article$id);
  5674.         }
  5675.         return $total;
  5676.     }
  5677.     public function hasComposes($article)
  5678.     {
  5679.         if ( ! is_object($article)) {
  5680.             return false;
  5681.         }
  5682.         $composes $this->entityManager->getRepository(ArticleComposant::class)->findByArticle($article);
  5683.         return count($composes);
  5684.     }
  5685.     public function getTotalTache(Article $article)
  5686.     {
  5687.         $repo_note $this->entityManager->getRepository(Note::class);
  5688.         $total     $repo_note->getTotalTacheArticle($article);
  5689.         return $total['total'];
  5690.     }
  5691.     public function _____getPrixEncours(Article $article$articleCommande ''$client$reprise false$quantite ""$adresse ""$enregAuto false$round 2)
  5692.     {
  5693.         $t                  "";
  5694.         $type_compta_client "";
  5695.         if (is_object($client)) {
  5696.             if (is_object($client->getCompta())) {
  5697.                 $type_compta_client $client->getCompta()->getId();
  5698.             }
  5699.         }
  5700.         $array          = ["enPromo" => false];
  5701.         $repo_prixPromo $this->entityManager->getRepository(PrixPromo::class);
  5702.         $promos         $repo_prixPromo->getPromos($article$client);
  5703.         //echo "<div> TC (".$type_compta_client.")</div>";
  5704.         if ($type_compta_client == "2" && == 0) {
  5705.             $repo_condha $this->entityManager->getRepository(ConditionAchat::class);
  5706.             $condHa      $repo_condha->findOneBy(["article" => $article"defaut" => 1]);
  5707.             if (is_object($condHa)) {
  5708.                 $prix $condHa->getPrixAchatNet();
  5709.                 if ($condHa->getCoefficientConditionnement() != 0) {
  5710.                     $prix $prix $condHa->getCoefficientConditionnement();
  5711.                 }
  5712.                 $tauxChange  1;
  5713.                 $fournisseur $condHa->getFournisseur();
  5714.                 if (is_object($fournisseur)) {
  5715.                     $devise $fournisseur->getDevise();
  5716.                 }
  5717.                 if (is_object($devise) && $devise->getTauxChange() != 0) {
  5718.                     $tauxChange $devise->getTauxChange();
  5719.                 }
  5720.                 $prix $prix $tauxChange//prix d'achat brut converti en euros
  5721.                 //if($condHa->getCoefficientConditionnement() > 0) $prix = $prix / $condHa->getCoefficientConditionnement();
  5722.                 $augmentation $prix 10 100;
  5723.                 $prix         $prix $augmentation;
  5724.                 $prix         round($prix$round);
  5725.             } else {
  5726.                 $prix $article->getPrixVente();
  5727.             }
  5728.         } else {
  5729.             $prix $article->getPrixVente();
  5730.         }
  5731.         //$prix = $article->getPrixVente();
  5732.         $prixArticleCommande false;
  5733.         $array['reduction'] = '';
  5734.         if (is_object($articleCommande) && ! $enregAuto) {
  5735.             //echo "BABARBUBU";
  5736.             $prix                       floatval($articleCommande->getPrixBase());
  5737.             $coefficientConditionnement $articleCommande->getCoefficientConditionnement();
  5738.             if ( ! empty($coefficientConditionnement)) {
  5739.                 $prix $prix $coefficientConditionnement;
  5740.             }
  5741.             $prix                round($prix$round);
  5742.             $prixArticleCommande true;
  5743.         } elseif ($quantite != 0) {
  5744.             $repo_cond_vente $this->entityManager->getRepository(ConditionVente::class);
  5745.             $condVente       $repo_cond_vente->findPrixParQuantite($article$quantite$client$adresse);
  5746.             if (is_object($condVente)) {
  5747.                 $prix $condVente->getPrix();
  5748.                 //echo "<div>ZZZZTUTU ".$prix."</div>";
  5749.             }
  5750.         }
  5751.         if ($reprise == true) {
  5752.             if (is_object($articleCommande)) {
  5753.                 $prix floatval($articleCommande->getPrixBase());
  5754.             } elseif ( ! empty($articleCommande['prixBase'])) {
  5755.                 $prix $articleCommande['prixBase'];
  5756.             }
  5757.             $prixArticleCommande true;
  5758.         }
  5759.         foreach ($promos as $p) {
  5760.             if ($p->getPrix() > && $p->getPrix() < $prix) {
  5761.                 if ( ! $prixArticleCommande) {
  5762.                     $array['promoId']   = $p->getId();
  5763.                     $prix               $p->getPrix();
  5764.                     $array['enPromo']   = true;
  5765.                     $array['reduction'] = '(-'.($article->getPrixVente() - $p->getPrix()).' â‚¬)';
  5766.                 }
  5767.             } elseif ($p->getReduction() > 0) {
  5768.                 if ($p->getTypeReduction() == "montant") {
  5769.                     $calculNouveauPrix $article->getPrixVente() - $p->getReduction();
  5770.                     if ($calculNouveauPrix $prix) {
  5771.                         if ( ! $prixArticleCommande) {
  5772.                             $prix               $calculNouveauPrix;
  5773.                             $array['promoId']   = $p->getId();
  5774.                             $array['enPromo']   = true;
  5775.                             $array['reduction'] = '(-'.$p->getReduction().' â‚¬)';
  5776.                         }
  5777.                     }
  5778.                 } elseif ($p->getTypeReduction() == "pourcentage") {
  5779.                     $calculNouveauPrix $article->getPrixVente() - ($article->getPrixVente() * $p->getReduction() / 100);
  5780.                     if ($calculNouveauPrix $prix) {
  5781.                         if ( ! $prixArticleCommande) {
  5782.                             $array['promoId']   = $p->getId();
  5783.                             $prix               $calculNouveauPrix;
  5784.                             $array['enPromo']   = true;
  5785.                             $array['reduction'] = '(-'.$p->getReduction().'%)';
  5786.                         }
  5787.                     }
  5788.                 }
  5789.             }
  5790.         }
  5791.         $array['prixVente'] = $article->getPrixVente();
  5792.         $array['prix']      = $prix;
  5793.         return $array;
  5794.     }
  5795.     //version cazin
  5796.     public function getPrixEncours(Article $article$articleCommande ''$client$reprise false$quantite ""$adresse ""$enregAuto false$round 2)
  5797.     {
  5798.         //echo "<div>HELLO ".$client->getId()."</div>";
  5799.         $t                  "";
  5800.         $type_compta_client "";
  5801.         /** @var Client $client */
  5802.         if (is_object($client)) {
  5803.             if (is_object($client->getCompta())) {
  5804.                 $type_compta_client $client->getCompta()->getId();
  5805.             }
  5806.         }
  5807.         //$cump = $article->getcpump
  5808.         $array          = ["enPromo" => false];
  5809.         $repo_prixPromo $this->entityManager->getRepository(PrixPromo::class);
  5810.         $repo_devise    $this->entityManager->getRepository(Devise::class);
  5811.         $promos         $repo_prixPromo->getPromos($article$client);
  5812.         $conditionVente false;
  5813.         $prixNet        0;
  5814.         $cump           $article->getCpump();
  5815.         if (is_null($cump) or $cump == 0) {
  5816.             $repo_condha $this->entityManager->getRepository(ConditionAchat::class);
  5817.             $condHa      $repo_condha->findOneBy(["article" => $article"defaut" => 1]);
  5818.             if (is_object($condHa)) {
  5819.                 $cump $condHa->getPrixAchatNet();
  5820.                 if ($condHa->getCoefficientConditionnement() != 0) {
  5821.                     $cump $cump $condHa->getCoefficientConditionnement();
  5822.                 }
  5823.                 $tauxChange  1;
  5824.                 $fournisseur $condHa->getFournisseur();
  5825.                 $devise $repo_devise->find(1);
  5826.                 if (is_object($fournisseur) and is_object($fournisseur->getDevise())) {
  5827.                     $devise $fournisseur->getDevise();
  5828.                 }
  5829.                 if (is_object($devise) && $devise->getTauxChange() != 0) {
  5830.                     $tauxChange $devise->getTauxChange();
  5831.                 }
  5832.                 $cump $cump $tauxChange//prix d'achat brut converti en euros
  5833.                 $cump round($cump2);
  5834.             }
  5835.         }
  5836.         //Valable que pour DTC ?
  5837.         if ($type_compta_client == "2" and != 1) {
  5838.             $repo_condha $this->entityManager->getRepository(ConditionAchat::class);
  5839.             $condHa      $repo_condha->findOneBy(["article" => $article"defaut" => 1]);
  5840.             if (is_object($condHa)) {
  5841.                 $prix $condHa->getPrixAchatNet();
  5842.                 if ($condHa->getCoefficientConditionnement() != 0) {
  5843.                     $prix $prix $condHa->getCoefficientConditionnement();
  5844.                 }
  5845.                 $tauxChange  1;
  5846.                 $fournisseur $condHa->getFournisseur();
  5847.                 if (is_object($fournisseur)) {
  5848.                     $devise $fournisseur->getDevise();
  5849.                 }
  5850.                 if (is_object($devise) && $devise->getTauxChange() != 0) {
  5851.                     $tauxChange $devise->getTauxChange();
  5852.                 }
  5853.                 $prix $prix $tauxChange//prix d'achat brut converti en euros
  5854.                 //if($condHa->getCoefficientConditionnement() > 0) $prix = $prix / $condHa->getCoefficientConditionnement();
  5855.                 $augmentation $prix 10 100;
  5856.                 $prix         $prix $augmentation;
  5857.                 $prix         round($prix2);
  5858.             } else {
  5859.                 $prix $article->getPrixVente();
  5860.             }
  5861.         } else {
  5862.             $prix $article->getPrixVente();
  5863.         }
  5864.         //$prix = $article->getPrixVente();
  5865.         $prixArticleCommande false;
  5866.         $array['reduction'] = '';
  5867.         if (is_object($articleCommande) && ! $enregAuto) {
  5868.             $prix                       floatval($articleCommande->getPrixBase());
  5869.             $coefficientConditionnement $articleCommande->getCoefficientConditionnement();
  5870.             if ( ! empty($coefficientConditionnement)) {
  5871.                 $prix $prix $coefficientConditionnement;
  5872.             }
  5873.             $prix                round($prix3);
  5874.             $prixArticleCommande true;
  5875.             $repo_cond_vente $this->entityManager->getRepository(ConditionVente::class);
  5876.             $condVente       $repo_cond_vente->findPrixParQuantite($article$quantite$client$adresse);
  5877.             if (is_object($condVente)) {
  5878.                 //echo "LULU";
  5879.                 if ($prix == $condVente->getPrix()) {
  5880.                     $prixNet 1;
  5881.                 }
  5882.             } else {
  5883.                 //echo "LALA";
  5884.             }
  5885.         } elseif ($quantite != 0) {
  5886.             $repo_cond_vente $this->entityManager->getRepository(ConditionVente::class);
  5887.             $condVente       $repo_cond_vente->findPrixParQuantite($article$quantite$client$adresse);
  5888.             if (is_object($condVente)) {
  5889.                 //echo "LULU";
  5890.                 $prix $condVente->getPrix();
  5891.                 //echo "<div>ZZZZTUTU ".$prix."</div>";
  5892.                 $conditionVente true;
  5893.                 $prixNet        1;
  5894.             } else {
  5895.                 //echo "LALA";
  5896.             }
  5897.         }
  5898.         if ($reprise == true) {
  5899.             if (is_object($articleCommande)) {
  5900.                 $prix floatval($articleCommande->getPrixBase());
  5901.             } elseif ( ! empty($articleCommande['prixBase'])) {
  5902.                 $prix $articleCommande['prixBase'];
  5903.             }
  5904.             $prixArticleCommande true;
  5905.         }
  5906.         foreach ($promos as $p) {
  5907.             if ($p->getPrix() > && $p->getPrix() < $prix) {
  5908.                 if ( ! $prixArticleCommande) {
  5909.                     $array['promoId']   = $p->getId();
  5910.                     $prix               $p->getPrix();
  5911.                     $array['enPromo']   = true;
  5912.                     $array['reduction'] = '(-'.($article->getPrixVente() - $p->getPrix()).' â‚¬)';
  5913.                 }
  5914.             } elseif ($p->getReduction() > 0) {
  5915.                 if ($p->getTypeReduction() == "montant") {
  5916.                     $calculNouveauPrix $article->getPrixVente() - $p->getReduction();
  5917.                     if ($calculNouveauPrix $prix) {
  5918.                         if ( ! $prixArticleCommande) {
  5919.                             $prix               $calculNouveauPrix;
  5920.                             $array['promoId']   = $p->getId();
  5921.                             $array['enPromo']   = true;
  5922.                             $array['reduction'] = '(-'.$p->getReduction().' â‚¬)';
  5923.                         }
  5924.                     }
  5925.                 } elseif ($p->getTypeReduction() == "pourcentage") {
  5926.                     $calculNouveauPrix $article->getPrixVente() - ($article->getPrixVente() * $p->getReduction() / 100);
  5927.                     if ($calculNouveauPrix $prix) {
  5928.                         if ( ! $prixArticleCommande) {
  5929.                             $array['promoId']   = $p->getId();
  5930.                             $prix               $calculNouveauPrix;
  5931.                             $array['enPromo']   = true;
  5932.                             $array['reduction'] = '(-'.$p->getReduction().'%)';
  5933.                         }
  5934.                     }
  5935.                 }
  5936.             }
  5937.         }
  5938.         $array['prixVente']      = $article->getPrixVente();
  5939.         $array['prix']           = $prix;
  5940.         $array['cump']           = $cump;
  5941.         $array['conditionVente'] = $conditionVente;
  5942.         $array['prixNet']        = $prixNet;
  5943.         return $array;
  5944.     }
  5945.     public function getPrixEncoursConditionVente(Article $article$articleCommande ''$client$quantite ""$adresse "")
  5946.     {
  5947.         /*
  5948.         echo "<div>ART ".$article->getId()."</div>";
  5949.         echo "<div>ARTC ".$articleCommande."</div>";
  5950.         echo "<div>client ".$client."</div>";
  5951.         echo "<div>QTE ".$quantite."</div>";
  5952.         */
  5953.         //echo "<div>HELLO ".$client->getId()."</div>";
  5954.         $t "";
  5955.         if (is_object($client)) {
  5956.             //echo "A ".$client->getEmail();
  5957.         }
  5958.         $array               = ["enPromo" => false];
  5959.         $repo_prixPromo      $this->entityManager->getRepository(PrixPromo::class);
  5960.         $promos              $repo_prixPromo->getPromos($article$client);
  5961.         $prix                $article->getPrixVente();
  5962.         $prixArticleCommande false;
  5963.         $array['reduction'] = '';
  5964.         //echo "<div>quantite ".$quantite."</div>";
  5965.         if (is_object($articleCommande) and != 1) {
  5966.             $prix                $articleCommande->getPrixBase();
  5967.             $prixArticleCommande true;
  5968.         } elseif ($quantite != 0) {
  5969.             //echo "<div>ZZZZTUTU ".$prix."</div>";
  5970.             $repo_cond_vente $this->entityManager->getRepository(ConditionVente::class);
  5971.             $condVente       $repo_cond_vente->findPrixParQuantite($article$quantite$client$adresse);
  5972.             if (is_object($condVente)) {
  5973.                 //echo "PPPP";
  5974.                 $prix $condVente->getPrix();
  5975.             } else {
  5976.                 //echo "MMMMMM";
  5977.             }
  5978.         }
  5979.         //  echo "JJJJ";
  5980.         foreach ($promos as $p) {
  5981.             if ($p->getPrix() > && $p->getPrix() < $prix) {
  5982.                 //  echo "<div>PRIXPROMO ".$p->getPrix()."</div>";
  5983.                 if ( ! $prixArticleCommande) {
  5984.                     $array['promoId']   = $p->getId();
  5985.                     $prix               $p->getPrix();
  5986.                     $array['enPromo']   = true;
  5987.                     $array['reduction'] = '(-'.($article->getPrixVente() - $p->getPrix()).' â‚¬)';
  5988.                 }
  5989.             } elseif ($p->getReduction() > 0) {
  5990.                 if ($p->getTypeReduction() == "montant") {
  5991.                     $calculNouveauPrix $article->getPrixVente() - $p->getReduction();
  5992.                     if ($calculNouveauPrix $prix) {
  5993.                         if ( ! $prixArticleCommande) {
  5994.                             $prix               $calculNouveauPrix;
  5995.                             $array['promoId']   = $p->getId();
  5996.                             $array['enPromo']   = true;
  5997.                             $array['reduction'] = '(-'.$p->getReduction().' â‚¬)';
  5998.                         }
  5999.                     }
  6000.                 } elseif ($p->getTypeReduction() == "pourcentage") {
  6001.                     $calculNouveauPrix $article->getPrixVente() - ($article->getPrixVente() * $p->getReduction() / 100);
  6002.                     if ($calculNouveauPrix $prix) {
  6003.                         if ( ! $prixArticleCommande) {
  6004.                             $array['promoId']   = $p->getId();
  6005.                             $prix               $calculNouveauPrix;
  6006.                             $array['enPromo']   = true;
  6007.                             $array['reduction'] = '(-'.$p->getReduction().'%)';
  6008.                         }
  6009.                     }
  6010.                 }
  6011.             }
  6012.         }
  6013.         $array['prixVente'] = $article->getPrixVente();
  6014.         $array['prix']      = $prix;
  6015.         //print_r($array);
  6016.         //exit;
  6017.         return $prix;
  6018.     }
  6019.     public function getComposants($article)
  6020.     {
  6021.         $articles           = [];
  6022.         $articlesComposants $this->entityManager->getRepository(ArticleComposant::class)->findBy(['articleCompose' => $article]);
  6023.         if (count($articlesComposants)) {
  6024.             foreach ($articlesComposants as $compo) {
  6025.                 $articles[] = $compo->getArticle();
  6026.             }
  6027.         }
  6028.         return $articles;
  6029.     }
  6030.     public function mettreAjourCompose($compose)
  6031.     {
  6032.         $poids           0;
  6033.         $ecocontribution 0;
  6034.         $prixBase        0;
  6035.         foreach ($compose->getArticlesComposants() as $composant) {
  6036.             $prixTmp       0;
  6037.             $qteConseillee $this->getQteConseillee($composant->getArticle());
  6038.             if ( ! empty($qteConseillee['condition'])) {
  6039.                 $prixTmp $qteConseillee['condition']->getPrixAchatNet();
  6040.                 if (floatval($qteConseillee['condition']->getCoefficientConditionnement()) != 0) {
  6041.                     $prixTmp $prixTmp floatval($qteConseillee['condition']->getCoefficientConditionnement());
  6042.                 }
  6043.                 if (is_object($qteConseillee['condition']->getFournisseur()) && is_object($qteConseillee['condition']->getFournisseur()->getDevise()) && floatval(
  6044.                                                                                                                                                              $qteConseillee['condition']->getFournisseur(
  6045.                                                                                                                                                              )->getDevise()->getTauxChange()
  6046.                                                                                                                                                          ) != 0) {
  6047.                     $prixTmp $prixTmp floatval($qteConseillee['condition']->getFournisseur()->getDevise()->getTauxChange());
  6048.                 }
  6049.             }
  6050.             $prixBase += $prixTmp floatVal($composant->getQuantite());
  6051.             //$output->writeln("composant ecocontribution ".$composant->getArticle()->getEcocontribution());
  6052.             $poids           += floatVal($composant->getArticle()->getPoids()) * floatVal($composant->getQuantite());
  6053.             $ecocontribution += floatVal($composant->getArticle()->getEcocontribution()) * floatVal($composant->getQuantite());
  6054.         }
  6055.         $compose->setPoids($poids);
  6056.         $compose->setEcocontribution($ecocontribution);
  6057.         $compose->setPrixBase($prixBase);
  6058.         //recalcul du coefficient
  6059.         if (floatval($compose->getPrixBase()) != && floatval($compose->getPrixVente()) != 0) {
  6060.             $coefficient floatval($compose->getPrixVente()) / floatval($compose->getPrixBase());
  6061.             $compose->setCoefficientPrixBaseVente($coefficient);
  6062.         }
  6063.         /*
  6064.         if(floatval($compose->getPrixVente()) == 0){
  6065.             $prixVente = $prixBase * floatval($compose->getCoefficientPrixBaseVente());
  6066.             $compose->setPrixVente($prixVente);
  6067.         }
  6068.         */
  6069.         return $compose;
  6070.     }
  6071.     public function getNbAnnoncesPublieesParArticleEtMarketPlace($articleId$marketPlaceId)
  6072.     {
  6073.         //return $articleId;
  6074.         $repo_article_market_place $this->entityManager->getRepository(ArticleMarketPlace::class);
  6075.         $nbAnnonces                $repo_article_market_place->getNbAnnoncesPublieesParArticleEtMarketPlace($articleId$marketPlaceId);
  6076.         return $nbAnnonces['total'];
  6077.     }
  6078.     public function getNbAnnoncesParArticleEtMarketPlace($articleId$marketPlaceId)
  6079.     {
  6080.         //return $articleId;
  6081.         $repo_article_market_place $this->entityManager->getRepository(ArticleMarketPlace::class);
  6082.         $nbAnnonces                $repo_article_market_place->getNbAnnoncesParArticleEtMarketPlace($articleId$marketPlaceId);
  6083.         return $nbAnnonces['total'];
  6084.     }
  6085.     public function getNbAnnoncesPublieesParArticleEtCompteMarketPlace($articleId$compteMarketPlaceId)
  6086.     {
  6087.         //return $articleId;
  6088.         $repo_article_market_place $this->entityManager->getRepository(ArticleMarketPlace::class);
  6089.         $nbAnnonces                $repo_article_market_place->getNbAnnoncesPublieesParArticleEtCompteMarketPlace($articleId$compteMarketPlaceId);
  6090.         return $nbAnnonces['total'];
  6091.     }
  6092.     public function getNbAnnoncesParArticleEtCompteMarketPlace($articleId$compteMarketPlaceId)
  6093.     {
  6094.         //return $articleId;
  6095.         $repo_article_market_place $this->entityManager->getRepository(ArticleMarketPlace::class);
  6096.         $nbAnnonces                $repo_article_market_place->getNbAnnoncesParArticleEtCompteMarketPlace($articleId$compteMarketPlaceId);
  6097.         return $nbAnnonces['total'];
  6098.     }
  6099.     public function getPremiereImageArticleMarketPlace($articleMarketPlace_id)
  6100.     {
  6101.         $image                           "";
  6102.         $repo_image_article_market_place $this->entityManager->getRepository(ArticleMarketPlaceImage::class);
  6103.         $repo_article_market_place       $this->entityManager->getRepository(ArticleMarketPlace::class);
  6104.         $articleMarketPlace $repo_article_market_place->find($articleMarketPlace_id);
  6105.         $imageArticleMarketPlace $this->getImagesArticleMarketPlaceOrder($articleMarketPlace);
  6106.         $images   $repo_image_article_market_place->findBy(["articleMarketPlace" => $articleMarketPlace], ["ordre" => "asc"]);
  6107.         $tabImage = [];
  6108.         $tabImg   = [];
  6109.         if (count($articleMarketPlace->getArticle()->getImages()) > 0) {
  6110.             foreach ($articleMarketPlace->getArticle()->getImages() as $photo) {
  6111.                 if (array_key_exists($photo->getId(), $imageArticleMarketPlace)) {
  6112.                     $ordre_id $imageArticleMarketPlace[$photo->getId()]["ordre"];
  6113.                     //echo "<div>ORDRE ".$ordre_id."</div>";
  6114.                     //$tabImg['0'.$ordre_id]=$photo;
  6115.                     $tabImg array_merge($tabImg, ['0'.$ordre_id => $photo]);
  6116.                 }
  6117.             }
  6118.         }
  6119.         ksort($tabImg);
  6120.         $compteur 0;
  6121.         if (count($tabImg) > 0) {
  6122.             foreach ($tabImg as $key => $value) {
  6123.                 if ($compteur == 0) {
  6124.                     return $value;
  6125.                 }
  6126.                 $compteur++;
  6127.             }
  6128.         }
  6129.         return $image;
  6130.     }
  6131.     public function getImagesArticleMarketPlaceOrder($articleMarketPlace)
  6132.     {
  6133.         $repo_image_article_market_place $this->entityManager->getRepository(ArticleMarketPlaceImage::class);
  6134.         $images                          $repo_image_article_market_place->findBy(["articleMarketPlace" => $articleMarketPlace], ["ordre" => "asc"]);
  6135.         $tableau_id = [];
  6136.         foreach ($images as $img) {
  6137.             $tableau_id[$img->getImage()->getId()] = ["id" => $img->getImage()->getId(), "ordre" => $img->getOrdre(), "articleMarketPlaceImage" => $img];
  6138.         }
  6139.         //print_r($tableau_id);
  6140.         return $tableau_id;
  6141.     }
  6142.     public function getImagesArticleMarketPlace($articleMarketPlace)
  6143.     {
  6144.         $repo_image_article_market_place $this->entityManager->getRepository(ArticleMarketPlaceImage::class);
  6145.         $images                          $repo_image_article_market_place->findBy(["articleMarketPlace" => $articleMarketPlace]);
  6146.         $tableau_id = [];
  6147.         foreach ($images as $img) {
  6148.             $tableau_id[] = $img->getImage()->getId();
  6149.         }
  6150.         return $tableau_id;
  6151.     }
  6152.     public function getReferenceDivers($article null)
  6153.     {
  6154.         $numero_reference $this->entityManager->getRepository(Article::class)->getMaxNumeroReference($article);
  6155.         $numero_reference++;
  6156.         //$numero_reference = 2896;
  6157.         $numero_reference_retour $numero_reference;
  6158.         $reference               0;
  6159.         $unite            $numero_reference 10;
  6160.         $numero_reference -= $unite;
  6161.         $reference        += $unite;
  6162.         $dizaine          $numero_reference 100;
  6163.         $numero_reference -= $dizaine;
  6164.         $reference        += $dizaine;
  6165.         $centaine         $numero_reference 1000;
  6166.         $numero_reference -= $centaine;
  6167.         $reference        += $centaine;
  6168.         //transformer les milliers en chiffres
  6169.         $lettres        '';
  6170.         $milliers       $numero_reference 1000;
  6171.         $tableauLettres range('A''Z');
  6172.         $nbLettres      floor($milliers count($tableauLettres));
  6173.         for ($i 0$i $nbLettres$i++) {
  6174.             $lettres .= 'Z';
  6175.         }
  6176.         $reste $milliers count($tableauLettres);
  6177.         $lettres .= $tableauLettres[$reste];
  6178.         /*
  6179.         while(strlen($lettres) < 2){
  6180.             $lettres = 'A'.$lettres;
  6181.         }
  6182.         */
  6183.         while (strlen($reference) < 3) {
  6184.             $reference '0'.$reference;
  6185.         }
  6186.         $reference $lettres.$reference;
  6187.         return ['numero_reference' => $numero_reference_retour'reference' => $reference];
  6188.     }
  6189.     public function getCommentaires()
  6190.     {
  6191.         return $this->entityManager->getRepository(Article::class)->findBy([
  6192.                                                                                'est_commentaire' => 1,
  6193.                                                                            ], ['reference' => 'ASC']);
  6194.     }
  6195.     public function capaciteProduction($article$count 0)
  6196.     {
  6197.         $count++;
  6198.         if ($count 100) {
  6199.             return 0;
  6200.         }
  6201.         $capacites = [];
  6202.         foreach ($article->getArticlesComposants() as $composant) {
  6203.             $articleTmp $composant->getArticle();
  6204.             if ( ! $articleTmp->getNonStocke() && ! $articleTmp->getPrestation() && ! $articleTmp->getMainOeuvre()) {
  6205.                 $dispo $articleTmp->getDispo() / $composant->getQuantite();
  6206.                 if ($articleTmp->getProduitInterne()) {
  6207.                     $dispo += $this->capaciteProduction($articleTmp$count);
  6208.                 }
  6209.                 $capacites[] = $dispo;
  6210.             }
  6211.         }
  6212.         if (count($capacites)) {
  6213.             return min($capacites);
  6214.         } else {
  6215.             return 0;
  6216.         }
  6217.     }
  6218.     public function creerHistorique($article$typeMessage$donnees = [])
  6219.     {
  6220.         $enregistrer false;
  6221.         $message     $article->getReference();
  6222.         $user "";
  6223.         if ($this->security->getUser() !== null) {
  6224.             $user $this->security->getUser();
  6225.         }
  6226.         $nbNouvellesLignes 0;
  6227.         $typesMessage = [$typeMessage];
  6228.         foreach ($typesMessage as $typeMessage) {
  6229.             switch ($typeMessage) {
  6230.                 case :
  6231.                     $titre 'Création article';
  6232.                     if (array_key_exists('message'$donnees)) {
  6233.                         $message .= ' '.$donnees['message'];
  6234.                     }
  6235.                     break;
  6236.                 default:
  6237.                     $titre '';
  6238.                     if (array_key_exists('titre'$donnees)) {
  6239.                         $titre $donnees['titre'];
  6240.                     }
  6241.                     if (array_key_exists('message'$donnees)) {
  6242.                         $message .= ' '.$donnees['message'];
  6243.                     }
  6244.                     break;
  6245.             }
  6246.             $historique = new HistoriqueArticle();
  6247.             if ( ! empty($titre)) {
  6248.                 $historique->setTitre($titre);
  6249.                 $historique->setArticle($article);
  6250.                 if (is_object($user)) {
  6251.                     $historique->setUtilisateur($user);
  6252.                 }
  6253.                 if ( ! empty($message)) {
  6254.                     $historique->setMessage($message);
  6255.                 }
  6256.                 $this->entityManager->persist($historique);
  6257.                 $enregistrer true;
  6258.             }
  6259.         }
  6260.         if ($enregistrer) {
  6261.             $this->entityManager->flush();
  6262.         }
  6263.         //return $historique;
  6264.     }
  6265.     function majrefAppelFourSurArticle($article_id)
  6266.     {
  6267.         $conn     $this->entityManager->getConnection();
  6268.         $sql_cond "select id,reference_fournisseur from article__condition_achat where date_supression is null and article_id = ".$article_id;
  6269.         $stmt     $conn->executeQuery($sql_cond);
  6270.         $cond_achats       $stmt->fetchAllAssociative();
  6271.         $total_cond_achats count($cond_achats);
  6272.         $ref_appel "";
  6273.         $tab_appel = [];
  6274.         if ($total_cond_achats 0) {
  6275.             foreach ($cond_achats as $cond_bdd) {
  6276.                 //$output->writeln("REFFOUR:".$cond_bdd["reference_fournisseur"]);
  6277.                 $ref_four_tmp                      $cond_bdd["reference_fournisseur"];
  6278.                 $cond_bdd["reference_fournisseur"] = str_replace("-"""$cond_bdd["reference_fournisseur"]);
  6279.                 $cond_bdd["reference_fournisseur"] = str_replace("."""$cond_bdd["reference_fournisseur"]);
  6280.                 if ( ! in_array($cond_bdd["reference_fournisseur"], $tab_appel)) {
  6281.                     $tab_appel[] = $cond_bdd["reference_fournisseur"];
  6282.                     $ref_appel   .= $cond_bdd["reference_fournisseur"]."-";
  6283.                     $ref_appel   .= $ref_four_tmp."-";
  6284.                 }
  6285.             }
  6286.         }
  6287.         $ref_appel trim($ref_appel"-");
  6288.         $conn->update('article__article', ["reference_appel_10" => $ref_appel], ['id' => $article_id]);
  6289.     }
  6290.     public function getStockPreparable(ArticleCommande $articleCommande)
  6291.     {
  6292.         $stockPreparable       0;
  6293.         $repo_article_commande $this->entityManager->getRepository(ArticleCommande::class);
  6294.         //$quantiteDejaPrepareeSimplifieeGlobal = $repo_article_commande->getQuantiteDejaPrepareeSimplifiee($articleCommande->getArticle()->getId(),$articleCommande->getCommande());
  6295.         $quantiteDejaPrepareeSimplifieeGlobal $repo_article_commande->getQuantiteDejaPrepareeSimplifieeV2($articleCommande->getArticle()->getId());
  6296.         $stockPreparable                      $articleCommande->getArticle()->getStock() - $quantiteDejaPrepareeSimplifieeGlobal;
  6297.         $stockPreparable                      -= $articleCommande->getQuantiteDejaPrepareeSimplifie();
  6298.         $stockPreparable                      max(0$stockPreparable);
  6299.         return $stockPreparable;
  6300.     }
  6301.     public function getComposantsPreparerEmballer($article$quantite)
  6302.     {
  6303.         $articlesComposants = [];
  6304.         if (is_object($article) && $article->getVirtuel()) {
  6305.             foreach ($article->getArticlesComposants() as $articleComposant) {
  6306.                 if (is_object($articleComposant->getArticle()) && $articleComposant->getArticle()->getVirtuel()) {
  6307.                     $articlesComposants array_merge(
  6308.                         $articlesComposants,
  6309.                         $this->getComposantsPreparerEmballer($articleComposant->getArticle(), $articleComposant->getQuantite() * $quantite)
  6310.                     );
  6311.                 } elseif ( ! $articleComposant->getArticle()->getNonPreparable()) {
  6312.                     $articlesComposants[] = ['articleComposant' => $articleComposant'quantite' => $articleComposant->getQuantite() * $quantite];
  6313.                 }
  6314.             }
  6315.         }
  6316.         return $articlesComposants;
  6317.     }
  6318.     public function getPrixAchatNetEuro($article)
  6319.     {
  6320.         $repo_article $this->entityManager->getRepository(Article::class);
  6321.         if ( ! is_object($article)) {
  6322.             $article $repo_article->find($article);
  6323.         }
  6324.         if ($article->getVirtuel()) {
  6325.             $prix $this->getPrixAchatCompose($article);
  6326.         } else {
  6327.             $prix        0;
  6328.             $repo_condha $this->entityManager->getRepository(ConditionAchat::class);
  6329.             $condHa      $repo_condha->findOneBy(["article" => $article"defaut" => 1]);
  6330.             if ( ! is_object($condHa)) {
  6331.                 $condHa $repo_condha->findOneBy(["article" => $article]);
  6332.             }
  6333.             if (is_object($condHa)) {
  6334.                 $prix                       $condHa->getPrixAchatNet();
  6335.                 $coefficientConditionnement $condHa->getCoefficientConditionnement();
  6336.                 if ($coefficientConditionnement != 0) {
  6337.                     $prix $prix $coefficientConditionnement;
  6338.                 }
  6339.                 $fournisseur $condHa->getFournisseur();
  6340.                 if (is_object($fournisseur)) {
  6341.                     $devise $fournisseur->getDevise();
  6342.                     if (is_object($devise)) {
  6343.                         $tauxChange $devise->getTauxChange();
  6344.                         if ($tauxChange != 0) {
  6345.                             $prix $prix $tauxChange;
  6346.                         }
  6347.                     }
  6348.                 }
  6349.             }
  6350.         }
  6351.         return $prix;
  6352.     }
  6353.     public function getArticlesSansReference() {
  6354.         $sql "SELECT count(*) as total
  6355.                 FROM article__article
  6356.                 WHERE reference is null or reference = ''
  6357.                 ";
  6358.         $stmt   $this->entityManager->getConnection()->prepare($sql);
  6359.         $existe $stmt->executeQuery()->fetchAllAssociative();
  6360.         return $existe[0]["total"];
  6361.     }
  6362.     public function getArticlesOqtonManquant() {
  6363.         $sql "SELECT count(*) as total
  6364.                 FROM article__article
  6365.                 WHERE type_id = 1
  6366.                 AND
  6367.                 (oqton_urn is null or oqton_urn = '' or oqton_material_urn is null or oqton_material_urn = '')
  6368.                 ";
  6369.         $stmt   $this->entityManager->getConnection()->prepare($sql);
  6370.         $existe $stmt->executeQuery()->fetchAllAssociative();
  6371.         return $existe[0]["total"];
  6372.     }
  6373.     public function getCategorieDernierNiveauExport($article_id)
  6374.     {
  6375.         $categorie_obj NULL;
  6376.         $sql "SELECT c.id, c.libelle
  6377.         FROM article__categorie c
  6378.         INNER JOIN article__article_categorie ac ON ac.categorie_id = c.id
  6379.         LEFT JOIN article__categorie child ON child.categorie_parent_id = c.id AND child.statut = 1
  6380.         WHERE ac.article_id = ".$article_id."
  6381.         AND c.statut = 1
  6382.         AND child.id IS NULL;
  6383.         ";
  6384.         $stmt   $this->entityManager->getConnection()->prepare($sql);
  6385.         $existe $stmt->executeQuery()->fetchAllAssociative();
  6386.         return $existe;
  6387.     }
  6388.     public function getCategorieDernierNiveau(Article $article)
  6389.     {
  6390.         $categorie_obj NULL;
  6391.         $sql "SELECT c.id, c.libelle
  6392.         FROM article__categorie c
  6393.         INNER JOIN article__article_categorie ac ON ac.categorie_id = c.id
  6394.         LEFT JOIN article__categorie child ON child.categorie_parent_id = c.id AND child.statut = 1
  6395.         WHERE ac.article_id = ".$article->getid()."
  6396.         AND c.statut = 1
  6397.         AND child.id IS NULL;
  6398.         ";
  6399.         $stmt   $this->entityManager->getConnection()->prepare($sql);
  6400.         $existe $stmt->executeQuery()->fetchAllAssociative();
  6401.         if(count($existe)>0) {
  6402.             $categorie_obj $this->entityManager->getRepository(Categorie::class)->find($existe[0]["id"]);
  6403.         }
  6404.         return $categorie_obj;
  6405.     }
  6406.     public function findRandomArticles(int $limit 3,$categorie_id,$user_id 0)
  6407.     {
  6408.         $repo_article $this->entityManager->getRepository(Article::class);
  6409.         $articles $repo_article->findRandomArticles($limit,$categorie_id,$user_id);
  6410.         return $articles;
  6411.     }
  6412.     public function getArticlesComplement($article_id)
  6413.     {
  6414.         $articleComplements $this->entityManager->getRepository(ArticleComplementOption::class)->findEnfantsByParentAndStatus($article_id$status 1,'complement');
  6415.         return $articleComplements;
  6416.     }
  6417.     public function getDatesProchainesDispo($article_id)
  6418.     {
  6419.         $datesProchainesDispo $this->entityManager->getRepository(ArticleDateDispo::class)->getDatesProchainesDispo($article_id);
  6420.         return $datesProchainesDispo;
  6421.     }
  6422.     public function getPrixVenteTtc($article)
  6423.     {
  6424.         if(!is_object($article)) {
  6425.             $article $this->entityManager->getReference(Article::class, (int) $article);
  6426.             $prix $article->getPrixVente();
  6427.         }
  6428.         else {
  6429.             $prix $article->getPrixVente();
  6430.         }
  6431.         $tauxTva 0;
  6432.         if($article->getRegleTaxe()) {
  6433.             $tauxTva $article->getRegleTaxe()->getTauxDefaut();
  6434.         }
  6435.         $prixTtc $prix * (+ ($tauxTva 100));
  6436.         return $prixTtc;
  6437.     }
  6438.     public function getslugifArticle($article) {
  6439.         if(!is_object($article)) {
  6440.             $article $this->entityManager->getReference(Article::class, (int) $article);
  6441.         }
  6442.         $slugify = new Slugify();
  6443.         $slug $slugify->slugify($article->getLibelle().'-'.$article->getReference());
  6444.         return $slug;
  6445.     }
  6446.     public function getslugifImage($image) {
  6447.         if(!is_object($image)) {
  6448.             $image $this->entityManager->getReference(Image::class, (int) $image);
  6449.         }
  6450.         if(!is_object($image) or !$image->getArticle() ) {
  6451.             return "images/no-name.jpg";
  6452.         }
  6453.         $slugify = new Slugify();
  6454.         $slug "4x4/";
  6455.         $marque_libelle="";
  6456.         $libelleSecondaire="";
  6457.         if($image->getArticle()->getMarque()) $marque_libelle "-".$image->getArticle()->getMarque()->getLibelle();
  6458.        // if($image->getArticle()->getLibelleSecondaire() != "") $libelleSecondaire = "-".$image->getArticle()->getLibelleSecondaire();
  6459.         $slug .= $slugify->slugify($image->getArticle()->getReference().'-'.$image->getArticle()->getLibelle().$libelleSecondaire.$marque_libelle);
  6460.         $slug .= ".jpg";
  6461.         return $slug;
  6462.     }
  6463. }