src/Service/Articles/ArticleService.php line 7070

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