src/Service/Articles/ArticleService.php line 7027

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