src/Service/Articles/ArticlePumpService.php line 20

Open in your IDE?
  1. <?php
  2. namespace App\Service\Articles;
  3. use App\Entity\Articles\Article;
  4. use App\Entity\Articles\ConditionAchat;
  5. use App\Entity\Articles\MouvementStock;
  6. use Doctrine\ORM\EntityManagerInterface;
  7. use Symfony\Component\Console\Output\OutputInterface;
  8. class ArticlePumpService
  9. {
  10.     private $em;
  11.     public function __construct(EntityManagerInterface $em)
  12.     {
  13.         $this->em        $em;
  14.     }
  15.     public function majArticlePump(Article $articleOutputInterface $output nullMouvementStock $mouvementStock null)
  16.     {
  17.         if ($article->getStock() === 0) {
  18.             $conditionAchat $article->getConditionAchatDefaut();
  19.             if ($conditionAchat instanceof ConditionAchat && $conditionAchat->getPrixAchatNet() > 0) {
  20.                 $article->setPump($conditionAchat->getPrixAchatNet());
  21.             }
  22.         } else {
  23.             $conn $this->em->getConnection();
  24.             $conn->getConfiguration()->setSQLLogger(null);
  25.             $repo_article $this->em->getRepository(Article::class);
  26.             $repo_condha  $this->em->getRepository(ConditionAchat::class);
  27.             if ($article->getVirtuel() === false) {
  28.                 $articleId $article->getId();
  29.                 if ($output !== null) {
  30.                     $output->writeln("ARTICLE_ID :".$articleId);
  31.                 }
  32.                 $tab_article_probleme = array();
  33.                 $tab_virtuel_id       = array();
  34.                 $sql_mvt "
  35.                                 SELECT *
  36.                                 FROM article__mouvement_stock
  37.                                 WHERE article_id = ".$articleId."
  38.                                 AND dateSuppression is null
  39.                                 ORDER BY date_mouvement asc,id asc";
  40.                 //$output->writeln($sql_mvt);
  41.                 $stmt_mvt   $conn->executeQuery($sql_mvt);
  42.                 $mouvements $stmt_mvt->fetchAllAssociative();
  43.                 $sql_composants  "SELECT * FROM `article__article_composant` WHERE date_supression is null and `article_id` = ".$articleId;
  44.                 $stmt_composants $conn->executeQuery($sql_composants);
  45.                 $composants_bdd  $stmt_composants->fetchAllAssociative();
  46.                 if (count($composants_bdd) > 0) {
  47.                     foreach ($composants_bdd as $compo_bdd) {
  48.                         if ( ! in_array($compo_bdd["article_compose_id"], $tab_virtuel_id)) {
  49.                             $tab_virtuel_id[] = $compo_bdd["article_compose_id"];
  50.                         }
  51.                     }
  52.                 }
  53.                 $pump          0;
  54.                 $pumpHorsfrais 0;
  55.                 $tab_augmenter = array(3458913151621293132);
  56. //                $tab_augmenter = array(3, 13);
  57.                 $mv_pec            null;
  58.                 $pump_tmp          0;
  59.                 $pumpHorsfrais_tmp 0;
  60.                 if (count($mouvements) > 0) {
  61.                     $compteur_mvt 0;
  62.                     foreach ($mouvements as $mvt) {
  63.                         if($output !== null) {
  64.                             $output->writeln("MVT ID :".$mvt["id"]);
  65.                             $output->writeln("MVT DATE :".$mvt["date"]);
  66.                             $output->writeln("MVT TYPE :".$mvt["raison_mouvement_stock_id"]);
  67.                         }
  68.                         if ($compteur_mvt == 0) {
  69.                             if ($output !== null) {
  70.                                 $output->writeln("COMTPEUR 0");
  71.                             }
  72.                             if (in_array($mvt["raison_mouvement_stock_id"], $tab_augmenter)) {
  73.                                 $pump_tmp          $mvt['prix_achat_unitaire_avec_frais'];
  74.                                 $pumpHorsfrais_tmp $mvt['prix_achat'];
  75.                             } else {
  76.                                 if ($output !== null) {
  77.                                     $output->writeln("PAS 3 29 30");
  78.                                 }
  79.                                 $condHa $repo_condha->findOneBy(array("article" => $articleId"defaut" => 1));
  80.                                 if ( ! is_object($condHa)) {
  81.                                     $condHa $repo_condha->findOneBy(array("article" => $articleId));
  82.                                 }
  83.                                 if (is_object($condHa)) {
  84.                                     $prix $condHa->getPrixAchatNet();
  85.                                     if ($condHa->getCoefficientConditionnement() != 0) {
  86.                                         $prix $prix $condHa->getCoefficientConditionnement();
  87.                                     }
  88.                                     $tauxChange  1;
  89.                                     $fournisseur $condHa->getFournisseur();
  90.                                     if ($fournisseur !== null) {
  91.                                         $devise $fournisseur->getDevise();
  92.                                     }
  93.                                     if ($devise !== null && $devise->getTauxChange() != 0) {
  94.                                         $tauxChange $devise->getTauxChange();
  95.                                     }
  96.                                     $pump_tmp          $prix $tauxChange;
  97.                                     $pumpHorsfrais_tmp $prix $tauxChange;
  98.                                 } else {
  99.                                     if ($output !== null) {
  100.                                         $output->writeln("PREMIER MVT NON ACHAT ET PAS DE CONDITION ACHAT");
  101.                                     }
  102.                                     $tab_article_probleme[] = $articleId;
  103.                                     break;
  104.                                 }
  105.                             }
  106.                         } elseif (in_array($mvt["raison_mouvement_stock_id"], $tab_augmenter)) {
  107.                             if ($output !== null) {
  108.                                 $output->writeln("TAB AUGMENTER");
  109.                             }
  110.                             if ($mvt["raison_mouvement_stock_id"] == 32) {
  111.                                 $mvt["quantite"] = abs($mvt["quantite"]);
  112.                             }
  113.                             if (floatval($mvt["stock"]) < 0) {
  114.                                 $mvt["stock"] = 0;
  115.                             }
  116.                             if (floatval($mv_pec["stock"]) < 0) {
  117.                                 $mv_pec["stock"] = 0;
  118.                             }
  119.                             $diviseur = (floatval($mv_pec["stock"]) + floatval($mvt["quantite"]));
  120.                             if ($diviseur == 0) {
  121.                             } else {
  122.                                 if ($output !== null) {
  123.                                     $output->writeln("STOCK PREC :".floatval($mv_pec["stock"]));
  124.                                     $output->writeln("PUMP:".floatval($pump_tmp));
  125.                                     $output->writeln("PUMP HF:".floatval($pumpHorsfrais_tmp));
  126.                                     $output->writeln("QTE:".floatval($mvt["quantite"]));
  127.                                     $output->writeln("PRIX_ACHAT:".floatval($mvt["prix_achat_unitaire_avec_frais"]));
  128.                                     $output->writeln("PRIX_ACHAT_SANS_FRAIS:".floatval($mvt["prix_achat"]));
  129.                                     $output->writeln("");
  130.                                 }
  131.                                 $pump_tmp = (floatval($mv_pec["stock"]) * floatval($pump_tmp)) + (floatval($mvt["quantite"]) * floatval($mvt["prix_achat_unitaire_avec_frais"]));
  132.                                 $pump_tmp $pump_tmp / (floatval($mv_pec["stock"]) + floatval($mvt["quantite"]));
  133.                                 $pump_tmp round($pump_tmp2);
  134.                                 $pumpHorsfrais_tmp = (floatval($mv_pec["stock"]) * floatval($pumpHorsfrais_tmp)) + (floatval($mvt["quantite"]) * floatval($mvt["prix_achat"]));
  135.                                 $pumpHorsfrais_tmp $pumpHorsfrais_tmp / (floatval($mv_pec["stock"]) + floatval($mvt["quantite"]));
  136.                                 $pumpHorsfrais_tmp round($pumpHorsfrais_tmp2);
  137.                             }
  138.                         } else {
  139.                             if ($output !== null) {
  140.                                 $output->writeln("ELSE");
  141.                             }
  142.                         }
  143.                         $mv_pec $mvt;
  144.                         if ($output !== null) {
  145.                             $output->writeln("PUMP :".$pump_tmp);
  146.                             $output->writeln("PUMP HORS FRAIS :".$pumpHorsfrais_tmp);
  147.                         }
  148.                         $tableau_donnee                    = array();
  149.                         $tableau_donnee['pump']            = $pump_tmp;
  150.                         $tableau_donnee['pump_hors_frais'] = $pumpHorsfrais_tmp;
  151.                         $conn->update('article__mouvement_stock'$tableau_donnee, array('id' => $mvt['id']));
  152.                         $compteur_mvt++;
  153.                         if ($output !== null) {
  154.                             $output->writeln("####################################");
  155.                         }
  156.                     }
  157.                 }
  158.                 $article->setPump($pump_tmp);
  159.                 $article->setPumpHorsFrais($pumpHorsfrais_tmp);
  160. //                $article->setMajPump(0);
  161.                 if($mouvementStock !== null) {
  162.                     $mouvementStock->setPumpHorsFrais($pumpHorsfrais_tmp);
  163.                     $mouvementStock->setPump($pump_tmp);
  164.                 }
  165.             } else {
  166.                 $articleId $article->getId();
  167.                 if ($output !== null) {
  168.                     $output->writeln("ARTICLE_ID :".$articleId);
  169.                 }
  170.                 $pump            0;
  171.                 $pump_hors_frais 0;
  172.                 if ($output !== null) {
  173.                     $output->writeln("");
  174.                     $output->writeln("****************************************************");
  175.                     $output->writeln("");
  176.                 }
  177.                 $sql_mvt "
  178.                             SELECT *
  179.                             FROM article__mouvement_stock
  180.                             WHERE article_id = ".$articleId."
  181.                             and dateSuppression is null
  182.                             ORDER BY date_mouvement asc,id asc";
  183.                 $stmt_mvt   $conn->executeQuery($sql_mvt);
  184.                 $mouvements $stmt_mvt->fetchAllAssociative();
  185.                 $mv_pec            null;
  186.                 $pump_tmp          0;
  187.                 $pumpHorsfrais_tmp 0;
  188.                 $total_mvt_virtuel    count($mouvements);
  189.                 $compteur_mvt_virtuel 0;
  190.                 $sql_composants  "SELECT * FROM `article__article_composant` WHERE date_supression is null and `article_compose_id` = ".$articleId;
  191.                 $stmt_composants $conn->executeQuery($sql_composants);
  192.                 $composants_bdd  $stmt_composants->fetchAllAssociative();
  193.                 if (count($mouvements) > 0) {
  194.                     if (count($composants_bdd) > 0) {
  195.                         $compteur_mvt 0;
  196.                         foreach ($mouvements as $mvt) {
  197.                             $compteur_mvt_virtuel++;
  198.                             if ($output !== null) {
  199.                                 $output->writeln("MVT ID :".$mvt["id"]);
  200.                                 $output->writeln("MVT DATE :".$mvt["date"]);
  201.                                 $output->writeln("");
  202.                             }
  203.                             $pump            0;
  204.                             $pump_hors_frais 0;
  205.                             foreach ($composants_bdd as $compo_bdd) {
  206.                                 $sql_article  "SELECT id,exclure_pump,pump,pump_hors_frais FROM `article__article` WHERE  id = ".$compo_bdd["article_id"];
  207.                                 $stmt_article $conn->executeQuery($sql_article);
  208.                                 $article_bdd  $stmt_article->fetchAllAssociative();
  209.                                 if (count($article_bdd) == && (is_null($article_bdd[0]["exclure_pump"]) or $article_bdd[0]["exclure_pump"] == 0)) {
  210.                                     if ($output !== null) {
  211.                                         $output->writeln("COMPOSANT ARTICLE ID :".$compo_bdd["article_id"]." QTE :".$compo_bdd["quantite"]);
  212.                                     }
  213.                                     $sql_mvt_composant   "SELECT * FROM `article__mouvement_stock` WHERE article_id = ".$compo_bdd["article_id"]." AND date_mouvement <= '".$mvt["date"]."' ORDER BY date_mouvement desc LIMIT 0,1 ";
  214.                                     $stmt_mvt_composants $conn->executeQuery($sql_mvt_composant);
  215.                                     $mvt_composants_bdd  $stmt_mvt_composants->fetchAllAssociative();
  216.                                     if ($output !== null) {
  217.                                         $output->writeln($sql_mvt_composant);
  218.                                     }
  219.                                     if (count($mvt_composants_bdd) == 1) {
  220.                                         if ($output !== null) {
  221.                                             $output->writeln("PUMP MVT :".$mvt_composants_bdd[0]["pump"]);
  222.                                             $output->writeln("PUMP HORS FRAIS MVT :".$mvt_composants_bdd[0]["pump_hors_frais"]);
  223.                                         }
  224.                                         $pump            += $mvt_composants_bdd[0]["pump"] * $compo_bdd["quantite"];
  225.                                         $pump_hors_frais += $mvt_composants_bdd[0]["pump_hors_frais"] * $compo_bdd["quantite"];
  226.                                     } else {
  227.                                     }
  228.                                 } elseif (count($article_bdd) == 1) {
  229.                                     if ($output !== null) {
  230.                                         $output->writeln("EXCLU PUMP V1:".$article_bdd[0]["id"]);
  231.                                     }
  232.                                 }
  233.                                 if ($output !== null) {
  234.                                     $output->writeln("");
  235.                                 }
  236.                             }
  237.                             $pump            round($pump2);
  238.                             $pump_hors_frais round($pump_hors_frais2);
  239.                             if ($output !== null) {
  240.                                 $output->writeln("PUMP CALCULE :".$pump);
  241.                                 $output->writeln("PUMP HORS FRAIS CALCULE :".$pump_hors_frais);
  242.                             }
  243.                             $tableau_donnee                    = array();
  244.                             $tableau_donnee['pump']            = $pump;
  245.                             $tableau_donnee['pump_hors_frais'] = $pump_hors_frais;
  246.                             $conn->update('article__mouvement_stock'$tableau_donnee, array('id' => $mvt['id']));
  247.                             if ($output !== null) {
  248.                                 $output->writeln("");
  249.                                 $output->writeln("**************************************************** ".$compteur_mvt_virtuel."/".$total_mvt_virtuel);
  250.                                 $output->writeln("");
  251.                             }
  252.                         }
  253.                     }
  254.                 }
  255.                 $pump            0;
  256.                 $pump_hors_frais 0;
  257.                 if (count($composants_bdd) > 0) {
  258.                     foreach ($composants_bdd as $compo_bdd) {
  259.                         $sql_article  "SELECT id,exclure_pump,pump,pump_hors_frais FROM `article__article` WHERE  id = ".$compo_bdd["article_id"];
  260.                         $stmt_article $conn->executeQuery($sql_article);
  261.                         $article_bdd  $stmt_article->fetchAllAssociative();
  262.                         if ($output !== null) {
  263.                             print_r($article_bdd);
  264.                         }
  265.                         if (count($article_bdd) == && (is_null($article_bdd[0]["exclure_pump"]) or $article_bdd[0]["exclure_pump"] == 0)) {
  266.                             $pump            += $article_bdd[0]["pump"] * $compo_bdd["quantite"];
  267.                             $pump_hors_frais += $article_bdd[0]["pump_hors_frais"] * $compo_bdd["quantite"];
  268.                         } elseif (count($article_bdd) == 1) {
  269.                             if ($output !== null) {
  270.                                 $output->writeln("EXCLU PUMP V2:".$article_bdd[0]["id"]);
  271.                             }
  272.                         }
  273.                     }
  274.                 }
  275.                 $tableau_donnee  = array();
  276.                 $pump            round($pump2);
  277.                 $pump_hors_frais round($pump_hors_frais2);
  278.                 $article->setPump($pump);
  279.                 $article->setPumpHorsFrais($pump_hors_frais);
  280.                 $article->setMajPump(false);
  281.             }
  282.         }
  283.         $this->em->flush();
  284.     }
  285. }