<?php
namespace App\Service\Articles;
use App\Entity\Articles\ArticleCategorie;
use App\Entity\Articles\ArticleDateDispo;
use App\Entity\Articles\ArticleComplementOption;
use App\Entity\Articles\ArticleComposant;
use App\Entity\Articles\Categorie;
use App\Entity\Articles\Colis;
use App\Entity\Articles\Concurrence;
use App\Entity\Articles\ConditionVente;
use App\Entity\Articles\Declinaison;
use App\Entity\Articles\Devise;
use App\Entity\Articles\Document;
use App\Entity\Articles\Image;
use App\Entity\Articles\NumeroSerie;
use App\Entity\Articles\PrixDegressif;
use App\Entity\Articles\PrixPromo;
use App\Entity\Articles\RaisonMouvementStock;
use App\Entity\Articles\ValeurAttributArticle;
use App\Entity\Clients\Client;
use App\Entity\FO\Parametrage;
use App\Entity\GestionComerciale\Fabrication;
use App\Entity\Localisation\Zone;
use App\Entity\MarketPlace\ArticleMarketPlace;
use App\Entity\MarketPlace\ArticleMarketPlaceImage;
use App\Entity\MarketPlace\CompteMarketPlace;
use App\Entity\Notes\Note;
use App\Entity\QrCode\QrCode;
use App\Entity\Rangements\Emplacement;
use App\Entity\Remises\Remise;
use App\Entity\Taxes\RegleTaxe;
use App\Entity\Taxes\RegleTaxePays;
use App\Entity\Taxes\Taxe;
use App\Entity\Vehicules\Application;
use App\Model\GestionCommerciale\TypeDocumentCommercial;
use App\Model\Transporteurs\TypeZoneLivraison;
use App\Entity\Taxes\RegleTaxeZoneLivraison;
use App\Service\Clients\ClientService;
use App\Service\MarketPlace\EbayService;
use Doctrine\ORM\EntityManagerInterface;
use App\Entity\Articles\Article;
use App\Entity\GestionComerciale\ArticleCommande;
use App\Entity\GestionComerciale\Commande;
use App\Entity\GestionComerciale\CommandeFournisseur;
use App\Entity\Articles\ConditionAchat;
use App\Entity\Articles\MouvementStock;
use App\Entity\Fournisseurs\Fournisseur;
use App\Entity\FO\Cron;
use App\Entity\Articles\HistoriqueArticle;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use Symfony\Component\Security\Core\Security;
class ArticleService
{
private $entityManager;
private Security $security;
private MouvementStockService $mouvementStockService;
private ClientService $clientService;
private EbayService $ebayService;
private ImageArticleService $imageArticleService;
private DocumentArticle $documentArticleService;
private UrlGeneratorInterface $urlGenerator;
public function __construct(EntityManagerInterface $entityManager, Security $security, MouvementStockService $mouvementStockService, ClientService $clientService,
EbayService $ebayService, ImageArticleService $imageArticleService, DocumentArticle $documentArticleService, UrlGeneratorInterface $urlGenerator
) {
$this->entityManager = $entityManager;
$this->security = $security;
$this->mouvementStockService = $mouvementStockService;
$this->clientService = $clientService;
$this->ebayService = $ebayService;
$this->imageArticleService = $imageArticleService;
$this->documentArticleService = $documentArticleService;
$this->urlGenerator = $urlGenerator;
}
public function estArchivable($id)
{
$class = $this->couleurLigne($id);
if ($class == "info") {
return true;
}
return false;
}
public function getObjet($id)
{
$article = $this->entityManager->getRepository(Article::class)->find($id);
return $article;
}
public function couleurLigne($articleId)
{
$repo_article_market_place = $this->entityManager->getRepository(ArticleMarketPlace::class);
$repo_compte_market_place = $this->entityManager->getRepository(CompteMarketPlace::class);
$compteMarketPlace = $repo_compte_market_place->findAll();
$nbAnnonces = $repo_article_market_place->getNbAnnoncesParArticle($articleId);
$nbAnnoncesPubliees = $repo_article_market_place->getNbAnnoncesPublieesParArticle($articleId);
$unCompteMarketPlaceSansAnnonce = $repo_article_market_place->unCompteMarketPlaceSansAnnonce($articleId);
$class = 'warning';
if ($nbAnnoncesPubliees['total'] == 0 || $unCompteMarketPlaceSansAnnonce) {
$class = 'danger';
} elseif ($nbAnnonces['total'] == $nbAnnoncesPubliees['total']) {
$class = 'success';
}
$couleurBleu = true;
$auMoinsUneAnnoncePublie = false;
foreach ($compteMarketPlace as $cmp) {
if ($cmp->getId() != 6) {
$total = $repo_article_market_place->getNbAnnoncesPublieesParArticleEtCompteMarketPlace($articleId, $cmp);
$total2 = $repo_article_market_place->getNbAnnoncesParArticleEtCompteMarketPlace($articleId, $cmp);
//$nbAnnonces = $repo_article_market_place->getNbAnnoncesParArticleEtCompteMarketPlace($articleId, $compteMarketPlaceId);
if ($total["total"] > 0 && $total2["total"] > 0) {
$couleurBleu = false;
}
if ($total2["total"] > 0) {
$auMoinsUneAnnoncePublie = true;
}
//echo "<div>CMP : ".$cmp->getLibelle()."</div>";
//echo "<div>getNbAnnoncesPublieesParArticleEtMarketPlace : ".$total["total"]."</div>";
//echo "<div>getNbAnnoncesParArticleEtMarketPlace : ".$total2["total"]."</div>";
}
}
if ($couleurBleu && $auMoinsUneAnnoncePublie && ! $unCompteMarketPlaceSansAnnonce) {
$class = 'info';
}
$infosDebug = ' '.$nbAnnonces['total'].'/'.$nbAnnoncesPubliees['total'];
//$class .= ' nbAnnonces-'.$nbAnnonces['total'].' nbAnnoncesPubliees-'.$nbAnnoncesPubliees['total'].' unCompteMarketPlaceSansAnnonce-'.$unCompteMarketPlaceSansAnnonce;
//$class = 'info';
return $class;
}
public function testReferenceArticleExiste($reference = "")
{
if ($reference == "") {
return true;
} else {
$repo_article = $this->entityManager->getRepository(Article::class);
$existe = $repo_article->testReferenceArticleExiste($reference);
if (count($existe) == 1) {
if ($existe[0]["total"] == "0") {
return false;
}
}
}
return true;
}
public function majDeclinaison($id_article_enfant, $article)
{
$date = new \Datetime();
$repo_valeurs = $this->entityManager->getRepository(ValeurAttributArticle::class);
$repo_article = $this->entityManager->getRepository(Article::class);
$repo_cond_vente = $this->entityManager->getRepository(ConditionVente::class);
$parametrage = $this->entityManager->getRepository(Parametrage::class)->find(1);
$regles = $parametrage->getReglesDeclinaisonUnserialize();
$tableau_update = [];
$tableau_update["reference_client"] = $article->getReferenceClient();
$tableau_update["reference_fournisseur"] = null;
if (array_key_exists('copier_ref_fournisseur', $regles) && $regles["copier_ref_fournisseur"] == "1") {
$tableau_update["reference_fournisseur"] = $article->getReferenceFournisseur();
}
$tableau_update["prix_base"] = $article->getPrixBase();
if (is_object($article->getMarque())) {
$tableau_update["marque_id"] = $article->getMarque()->getId();
} else {
$tableau_update["marque_id"] = null;
}
$tableau_update["date_maj"] = $date->format("Y-m-d H:i:s");
if (array_key_exists('copier_desc', $regles) && $regles["copier_desc"] == "1") {
$tableau_update["description"] = $article->getDescription();
}
if (array_key_exists('copier_desc_courte', $regles) && $regles["copier_desc_courte"] == "1") {
$tableau_update["description_courte"] = $article->getDescriptionCourte();
}
if (array_key_exists('copier_dim', $regles) && $regles["copier_dim"] == "1") {
$tableau_update["largeur"] = $article->getLargeur();
$tableau_update["profondeur"] = $article->getProfondeur();
$tableau_update["hauteur"] = $article->getHauteur();
$tableau_update["poids"] = $article->getPoids();
}
if ($article->getStatut()) {
$tableau_update["statut"] = 1;
} else {
$tableau_update["statut"] = 0;
}
if ($article->getAConsigner()) {
$tableau_update["a_consigner"] = 1;
} else {
$tableau_update["a_consigner"] = 0;
}
if ($article->getConsigne()) {
$tableau_update["consigne"] = 1;
} else {
$tableau_update["consigne"] = 0;
}
if ($article->getStockAuto()) {
$tableau_update["stock_auto"] = 1;
} else {
$tableau_update["stock_auto"] = 0;
}
if ($article->getArretGamme()) {
$tableau_update["arret_gamme"] = 1;
} else {
$tableau_update["arret_gamme"] = 0;
}
if (is_object($article->getRegleTaxe())) {
$tableau_update["regle_taxe_id"] = $article->getRegleTaxe()->getId();
} else {
$tableau_update["regle_taxe_id"] = 1;
}
$tableau_update["remise_max"] = $article->getRemiseMax();
$tableau_update["type_remise_max"] = $article->getTypeRemiseMax();
$tableau_update["seuil_commande_f_mini"] = $article->getSeuilMiniCommandeFournisseur();
$tableau_update["seuil_commande_f_maxi"] = $article->getSeuilMaxiCommandeFournisseur();
$tableau_update["niveau_un_id"] = null;
$tableau_update["niveau_deux_id"] = null;
$tableau_update["niveau_trois_id"] = null;
$tableau_update["niveau_quatre_id"] = null;
$tableau_update["commentaire"] = $article->getCommentairePonctuel();
if ($article->getVirtuel()) {
$tableau_update["virtuel"] = 1;
} else {
$tableau_update["virtuel"] = 0;
}
$tableau_update["prix_vente"] = $article->getPrixVente();
$tableau_update["taux_marge"] = $article->getTauxMarge();
$tableau_update["marge"] = $article->getMarge();
$tableau_update["marge_reelle"] = $article->getMargeReelle();
$tableau_update["ecotaxe"] = $article->getEcotaxe();
$tableau_update["conditionnement"] = $article->getConditionnement();
if (is_object($article->getFournisseurDefaut())) {
$tableau_update["fournisseur_defaut_id"] = $article->getFournisseurDefaut()->getId();
} else {
$tableau_update["fournisseur_defaut_id"] = null;
}
$tableau_update["id_import"] = null;
if ($article->getProduitInterne()) {
$tableau_update["produit_interne"] = 1;
} else {
$tableau_update["produit_interne"] = 0;
}
$tableau_update["donnees_import"] = null;
if ($article->getMajPrix()) {
$tableau_update["maj_prix"] = 1;
} else {
$tableau_update["maj_prix"] = 0;
}
if (is_object($article->getUniteMesure())) {
$tableau_update["unite_mesure_id"] = $article->getUniteMesure()->getId();
} else {
$tableau_update["unite_mesure_id"] = null;
}
if ($article->getAfficherComposantPdfInterne()) {
$tableau_update["afficher_composant_pdf_interne"] = 1;
} else {
$tableau_update["afficher_composant_pdf_interne"] = 0;
}
if ($article->getAfficherComposantPdfExterne()) {
$tableau_update["afficher_composant_pdf_externe"] = 1;
} else {
$tableau_update["afficher_composant_pdf_externe"] = 0;
}
if (is_object($article->getCategorieRemiseArticle())) {
$tableau_update["categorie_remise_article_id"] = $article->getCategorieRemiseArticle()->getId();
} else {
$tableau_update["categorie_remise_article_id"] = null;
}
$tableau_update["libelle_secondaire"] = $article->getLibelleSecondaire();
$tableau_update["quantite_conseillee_mini"] = $article->getQuantiteConseilleeMini();
$tableau_update["quantite_conseillee"] = $article->getQuantiteConseillee();
$tableau_update["quantite_conseillee_maxi"] = $article->getQuantiteConseilleeMaxi();;
$tableau_update["archive"] = 0;
$tableau_update["coefficient_px_base_px_vente"] = $article->getCoefficientPrixBaseVente();
$tableau_update["reference_appel_1"] = $article->getReferenceAppel1();
$tableau_update["reference_appel_2"] = $article->getReferenceAppel2();
$tableau_update["reference_appel_3"] = $article->getReferenceAppel3();
$tableau_update["reference_appel_4"] = $article->getReferenceAppel4();
$tableau_update["reference_appel_5"] = $article->getReferenceAppel5();
$tableau_update["reference_appel_6"] = $article->getReferenceAppel6();
$tableau_update["reference_appel_7"] = $article->getReferenceAppel7();
$tableau_update["reference_appel_8"] = $article->getReferenceAppel8();
$tableau_update["reference_appel_9"] = $article->getReferenceAppel9();
$tableau_update["reference_appel_10"] = $article->getReferenceAppel10();
//$tableau_update["reference_appel_11"]=$tab_declinaison["reference"];
if ($article->getMainOeuvre()) {
$tableau_update["main_oeuvre"] = 1;
} else {
$tableau_update["main_oeuvre"] = 0;
}
if (is_object($article->getType())) {
$tableau_update["type_id"] = $article->getType()->getId();
} else {
$tableau_update["type_id"] = null;
}
if (is_object($article->getFamilleCompta())) {
$tableau_update["famille_compta_id"] = $article->getFamilleCompta()->getId();
} else {
$tableau_update["famille_compta_id"] = null;
}
if ($article->getPrestation()) {
$tableau_update["prestation"] = 1;
} else {
$tableau_update["prestation"] = 0;
}
if ($article->getNonStocke()) {
$tableau_update["non_stocke"] = 1;
} else {
$tableau_update["non_stocke"] = 0;
}
if ($article->getNonCommandable()) {
$tableau_update["non_commandable"] = 1;
} else {
$tableau_update["non_commandable"] = 0;
}
if ($article->getNumSerieObligatoire()) {
$tableau_update["num_serie_obligatoire"] = 1;
} else {
$tableau_update["num_serie_obligatoire"] = 0;
}
if (is_object($article->getArticleRemplacement())) {
$tableau_update["article_remplacement_id"] = $article->getArticleRemplacement()->getId();
} else {
$tableau_update["article_remplacement_id"] = null;
}
$tableau_update["cond_achat"] = $article->getConditionnementAchat();
$tableau_update["est_commentaire"] = 0;
$tableau_update["seuil_critique"] = $article->getSeuilCritique();
if (is_object($article->getRegleTaxeAchat())) {
$tableau_update["regle_taxe_achat_id"] = $article->getRegleTaxeAchat()->getId();
} else {
$tableau_update["regle_taxe_achat_id"] = null;
}
if ($article->getUniversel()) {
$tableau_update["universel"] = 1;
} else {
$tableau_update["universel"] = 0;
}
$tableau_update["delai_reappro"] = $article->getDelaiReappro();
$tableau_update["prix_revient"] = $article->getPrixRevient();
$tableau_update["frais_fonctionnement"] = $article->getFraisFonctionnement();
$tableau_update["nomenclature_douaniere"] = $article->getNomenclatureDouaniere();
$tableau_update["unspsc"] = $article->getUnspsc();
if (is_object($article->getTransporteur())) {
$tableau_update["transporteur_id"] = $article->getTransporteur()->getId();
} else {
$tableau_update["transporteur_id"] = null;
}
if (is_object($article->getAtelier())) {
$tableau_update["atelier_id"] = $article->getAtelier()->getId();
} else {
$tableau_update["atelier_id"] = null;
}
$tableau_update["commentaire_dimensions"] = $article->getCommentaireDimensions();
$tableau_update["ecocontribution"] = $article->getEcocontribution();
if (is_object($article->getFamilleCompta())) {
$tableau_update['famille_compta_id'] = $article->getFamilleCompta()->getId();
}
//$tableau_update['reference'] = $tab_declinaison["reference"];
//$tableau_update['libelle'] = $tab_declinaison["libelle"];
$tableau_update['article_declinaison_parent_id'] = $article->getId();
$conn = $this->entityManager->getConnection();
$conn->update('article__article', $tableau_update, ['id' => $id_article_enfant]);
$id_article = $id_article_enfant;
if ($id_article != "") {
$articleClone = $repo_article->find($id_article);
if (is_object($articleClone) && array_key_exists('copier_images', $regles) && $regles["copier_images"] == "1") {
$repo_article_image = $this->entityManager->getRepository(Image::class);
$images_article = $repo_article_image->findBy(["article" => $article]);
$sql = "DELETE FROM `article__image` WHERE article_id=".$id_article."";
$stmt = $this->entityManager->getConnection()->prepare($sql);
$stmt->execute();
exec(
"rm -rf uploads/articles/images/".$articleClone->getDate()->format("Y")."/".$articleClone->getDate()->format("m")."/".$articleClone->getDate()->format(
"d"
)."/".$articleClone->getId()."/*"
);
if (count($images_article) > 0) {
foreach ($images_article as $imageArticle) {
$image_parent = clone $imageArticle;
$image_parent->setArticle($articleClone);
$image_parent->setDate(new \Datetime());
$this->entityManager->persist($image_parent);
$tab_dossiers = ["large", "medium", "originals", "small", "thumbnails"];
for ($t = 0; $t < count($tab_dossiers); $t++) {
$chemin_src = "uploads/articles/images/".$article->getDate()->format("Y")."/".$article->getDate()->format("m")."/".$article->getDate()->format(
"d"
)."/".$article->getId()."/".$tab_dossiers[$t]."/".$image_parent->getUrl();
$chemin_dest = "uploads/articles/images/".$articleClone->getDate()->format("Y")."/".$articleClone->getDate()->format("m")."/".$articleClone->getDate()->format(
"d"
)."/".$articleClone->getId()."/".$tab_dossiers[$t]."/";
if ( ! is_dir($chemin_dest)) {
mkdir($chemin_dest, 0755, true);
chown($chemin_dest, "www-data");
chgrp($chemin_dest, "www-data");
chmod($chemin_dest, 0755);
}
exec("cp ".$chemin_src." ".$chemin_dest);
}
}
$this->entityManager->flush();
}
}
if (is_object($articleClone) && array_key_exists('copier_associes', $regles) && $regles["copier_associes"] == "1") {
$sql = "DELETE FROM `article__article_associe` WHERE parent_id=".$id_article."";
$stmt = $this->entityManager->getConnection()->prepare($sql);
$stmt->execute();
if (count($article->getArticlesAssociesParent()) > 0) {
foreach ($article->getArticlesAssociesParent() as $artAss) {
$artAssClone = clone $artAss;
$artAssClone->setParent($articleClone);
$this->entityManager->persist($artAssClone);
}
$this->entityManager->flush();
}
}
if (is_object($articleClone) && array_key_exists('copier_categorie', $regles) && $regles["copier_categorie"] == "1") {
$sql = "DELETE FROM `article__article_categorie` WHERE article_id=".$id_article."";
$stmt = $this->entityManager->getConnection()->prepare($sql);
$stmt->execute();
if (count($article->getArticleCategorie()) > 0) {
foreach ($article->getArticleCategorie() as $ac) {
if (is_object($ac->getCategorie())) {
$tableau_update_cat = [];
$tableau_update_cat["categorie_id"] = $ac->getCategorie()->getId();
$tableau_update_cat["article_id"] = $id_article;
$tableau_update_cat["position"] = $ac->getPosition();
$conn->insert('article__article_categorie', $tableau_update_cat);
}
}
}
}
if (is_object($articleClone) && array_key_exists('copier_condVente', $regles) && $regles["copier_condVente"] == "1") {
$sql = "DELETE FROM `article__condition_vente` WHERE article_id=".$id_article."";
$stmt = $this->entityManager->getConnection()->prepare($sql);
$stmt->execute();
$conditionsVente = $repo_cond_vente->findBy(["article" => $article]);
if (count($conditionsVente) > 0) {
foreach ($conditionsVente as $condVente) {
$condClone = clone $condVente;
$condClone->setArticle($articleClone);
$this->entityManager->persist($condClone);
}
$this->entityManager->flush();
}
}
if (1 != 1 and is_object($articleClone) && array_key_exists('copier_emplacements', $regles) && $regles["copier_emplacements"] == "1") {
if (count($article->getEmplacements()) > 0) {
foreach ($article->getEmplacements() as $emp) {
$empClone = clone $emp;
$empClone->setArticle($articleClone);
$empClone->setStock(0);
$empClone->setStockReserve(0);
$this->entityManager->persist($empClone);
}
$this->entityManager->flush();
}
}
if (is_object($articleClone) && array_key_exists('copier_condHa', $regles) && $regles["copier_condHa"] == "1") {
$sql = "UPDATE `article__condition_achat` SET date_supression = '".$date->format("Y-m-d H:i:s")."' WHERE article_id=".$id_article."";
$stmt = $this->entityManager->getConnection()->prepare($sql);
$stmt->execute();
if (count($article->getConditionsAchat()) > 0) {
foreach ($article->getConditionsAchat() as $cond) {
$condClone = clone $cond;
$condClone->setArticle($articleClone);
$this->entityManager->persist($condClone);
}
$this->entityManager->flush();
}
}
}
}
public function creerDeclinaison($tab_declinaison, $post, $article)
{
$date = new \Datetime();
$repo_valeurs = $this->entityManager->getRepository(ValeurAttributArticle::class);
$repo_article = $this->entityManager->getRepository(Article::class);
$repo_cond_vente = $this->entityManager->getRepository(ConditionVente::class);
//echo "ARTPARENT ".$article->getId();
//print_r($tab_declinaison);
$tableau_insert = [];
$tableau_insert["libelle"] = null;
$tableau_insert["date"] = $date->format("Y-m-d H:i:s");
$tableau_insert["reference"] = null;
$tableau_insert["reference_client"] = $article->getReferenceClient();
$tableau_insert["reference_fournisseur"] = null;
if (array_key_exists('copier_ref_fournisseur', $post) && $post["copier_ref_fournisseur"] == "1") {
$tableau_insert["reference_fournisseur"] = $article->getReferenceFournisseur();
}
$tableau_insert["prix_base"] = $article->getPrixBase();
if (is_object($article->getMarque())) {
$tableau_insert["marque_id"] = $article->getMarque()->getId();
} else {
$tableau_insert["marque_id"] = null;
}
$tableau_insert["date_supression"] = null;
$tableau_insert["date_maj"] = $date->format("Y-m-d H:i:s");
$tableau_insert["date_maj_prix"] = null;
$tableau_insert["description"] = null;
if (array_key_exists('copier_desc', $post) && $post["copier_desc"] == "1") {
$tableau_insert["description"] = $article->getDescription();
}
$tableau_insert["description_courte"] = null;
if (array_key_exists('copier_desc_courte', $post) && $post["copier_desc_courte"] == "1") {
$tableau_insert["description_courte"] = $article->getDescriptionCourte();
}
$tableau_insert["stock"] = 0;
$tableau_insert["largeur"] = 0;
$tableau_insert["profondeur"] = 0;
$tableau_insert["hauteur"] = 0;
$tableau_insert["poids"] = 0;
if (array_key_exists('copier_dim', $post) && $post["copier_dim"] == "1") {
$tableau_insert["largeur"] = $article->getLargeur();
$tableau_insert["profondeur"] = $article->getProfondeur();
$tableau_insert["hauteur"] = $article->getHauteur();
$tableau_insert["poids"] = $article->getPoids();
}
if ($article->getStatut()) {
$tableau_insert["statut"] = 1;
} else {
$tableau_insert["statut"] = 0;
}
if ($article->getAConsigner()) {
$tableau_insert["a_consigner"] = 1;
} else {
$tableau_insert["a_consigner"] = 0;
}
if ($article->getConsigne()) {
$tableau_insert["consigne"] = 1;
} else {
$tableau_insert["consigne"] = 0;
}
if ($article->getStockAuto()) {
$tableau_insert["stock_auto"] = 1;
} else {
$tableau_insert["stock_auto"] = 0;
}
if ($article->getArretGamme()) {
$tableau_insert["arret_gamme"] = 1;
} else {
$tableau_insert["arret_gamme"] = 0;
}
$tableau_insert["utilisateur_id"] = null;
if (is_object($article->getRegleTaxe())) {
$tableau_insert["regle_taxe_id"] = $article->getRegleTaxe()->getId();
} else {
$tableau_insert["regle_taxe_id"] = 1;
}
$tableau_insert["remise_max"] = $article->getRemiseMax();
$tableau_insert["type_remise_max"] = $article->getTypeRemiseMax();
$tableau_insert["seuil_commande_f_mini"] = $article->getSeuilMiniCommandeFournisseur();
$tableau_insert["seuil_commande_f_maxi"] = $article->getSeuilMaxiCommandeFournisseur();
$tableau_insert["niveau_un_id"] = null;
$tableau_insert["niveau_deux_id"] = null;
$tableau_insert["niveau_trois_id"] = null;
$tableau_insert["niveau_quatre_id"] = null;
$tableau_insert["pump"] = null;
$tableau_insert["commentaire"] = $article->getCommentairePonctuel();
if ($article->getVirtuel()) {
$tableau_insert["virtuel"] = 1;
} else {
$tableau_insert["virtuel"] = 0;
}
$tableau_insert["prix_vente"] = $article->getPrixVente();
$tableau_insert["taux_marge"] = $article->getTauxMarge();
$tableau_insert["marge"] = $article->getMarge();
$tableau_insert["marge_reelle"] = $article->getMargeReelle();
$tableau_insert["ecotaxe"] = $article->getEcotaxe();
$tableau_insert["conditionnement"] = $article->getConditionnement();
$tableau_insert["stock_reserve"] = 0;
$tableau_insert["ral_fournisseur"] = 0;
if (is_object($article->getFournisseurDefaut())) {
$tableau_insert["fournisseur_defaut_id"] = $article->getFournisseurDefaut()->getId();
} else {
$tableau_insert["fournisseur_defaut_id"] = null;
}
$tableau_insert["id_import"] = null;
if ($article->getProduitInterne()) {
$tableau_insert["produit_interne"] = 1;
} else {
$tableau_insert["produit_interne"] = 0;
}
$tableau_insert["donnees_import"] = null;
if ($article->getMajPrix()) {
$tableau_insert["maj_prix"] = 1;
} else {
$tableau_insert["maj_prix"] = 0;
}
if (is_object($article->getUniteMesure())) {
$tableau_insert["unite_mesure_id"] = $article->getUniteMesure()->getId();
} else {
$tableau_insert["unite_mesure_id"] = null;
}
if ($article->getAfficherComposantPdfInterne()) {
$tableau_insert["afficher_composant_pdf_interne"] = 1;
} else {
$tableau_insert["afficher_composant_pdf_interne"] = 0;
}
if ($article->getAfficherComposantPdfExterne()) {
$tableau_insert["afficher_composant_pdf_externe"] = 1;
} else {
$tableau_insert["afficher_composant_pdf_externe"] = 0;
}
if (is_object($article->getCategorieRemiseArticle())) {
$tableau_insert["categorie_remise_article_id"] = $article->getCategorieRemiseArticle()->getId();
} else {
$tableau_insert["categorie_remise_article_id"] = null;
}
$tableau_insert["temporaire"] = null;
$tableau_insert["libelle_secondaire"] = $article->getLibelleSecondaire();
$tableau_insert["a_commander"] = 0;
$tableau_insert["a_fabriquer"] = 0;
$tableau_insert["quantite_conseillee_mini"] = $article->getQuantiteConseilleeMini();
$tableau_insert["quantite_conseillee"] = $article->getQuantiteConseillee();
$tableau_insert["quantite_conseillee_maxi"] = $article->getQuantiteConseilleeMaxi();;
$tableau_insert["archive"] = 0;
$tableau_insert["coefficient_px_base_px_vente"] = $article->getCoefficientPrixBaseVente();
$tableau_insert["nom_web"] = null;
$tableau_insert["reference_web"] = null;
$tableau_insert["reference_fournisseur_web"] = null;
$tableau_insert["description_web"] = null;
$tableau_insert["resume_web"] = null;
$tableau_insert["frais_ports_texte_web"] = null;
$tableau_insert["message_qd_en_stock"] = null;
$tableau_insert["article_enconsigne_id"] = null;
$tableau_insert["reference_appel_1"] = $article->getReferenceAppel1();
$tableau_insert["reference_appel_2"] = $article->getReferenceAppel2();
$tableau_insert["reference_appel_3"] = $article->getReferenceAppel3();
$tableau_insert["reference_appel_4"] = $article->getReferenceAppel4();
$tableau_insert["reference_appel_5"] = $article->getReferenceAppel5();
$tableau_insert["reference_appel_6"] = $article->getReferenceAppel6();
$tableau_insert["reference_appel_7"] = $article->getReferenceAppel7();
$tableau_insert["reference_appel_8"] = $article->getReferenceAppel8();
$tableau_insert["reference_appel_9"] = $article->getReferenceAppel9();
$tableau_insert["reference_appel_10"] = $article->getReferenceAppel10();
$tableau_insert["reference_appel_11"] = $tab_declinaison["reference"];
if ($article->getMainOeuvre()) {
$tableau_insert["main_oeuvre"] = 1;
} else {
$tableau_insert["main_oeuvre"] = 0;
}
$tableau_insert["stock_reserve_fabrication"] = 0;
if (is_object($article->getType())) {
$tableau_insert["type_id"] = $article->getType()->getId();
} else {
$tableau_insert["type_id"] = null;
}
if (is_object($article->getFamilleCompta())) {
$tableau_insert["famille_compta_id"] = $article->getFamilleCompta()->getId();
} else {
$tableau_insert["famille_compta_id"] = null;
}
if ($article->getPrestation()) {
$tableau_insert["prestation"] = 1;
} else {
$tableau_insert["prestation"] = 0;
}
if ($article->getNonStocke()) {
$tableau_insert["non_stocke"] = 1;
} else {
$tableau_insert["non_stocke"] = 0;
}
if ($article->getNonCommandable()) {
$tableau_insert["non_commandable"] = 1;
} else {
$tableau_insert["non_commandable"] = 0;
}
$tableau_insert["divers"] = 0;
$tableau_insert["parent_id"] = null;
$tableau_insert["mouvemente"] = 0;
if ($article->getNumSerieObligatoire()) {
$tableau_insert["num_serie_obligatoire"] = 1;
} else {
$tableau_insert["num_serie_obligatoire"] = 0;
}
if (is_object($article->getArticleRemplacement())) {
$tableau_insert["article_remplacement_id"] = $article->getArticleRemplacement()->getId();
} else {
$tableau_insert["article_remplacement_id"] = null;
}
if ($article->getMajPoids()) {
$tableau_insert["maj_poids"] = 1;
} else {
$tableau_insert["maj_poids"] = 0;
}
if ($article->getMajPrixBase()) {
$tableau_insert["maj_prix_base"] = 1;
} else {
$tableau_insert["maj_prix_base"] = 0;
}
$tableau_insert["cond_achat"] = $article->getConditionnementAchat();
$tableau_insert["est_commentaire"] = 0;
$tableau_insert["seuil_critique"] = $article->getSeuilCritique();
if (is_object($article->getRegleTaxeAchat())) {
$tableau_insert["regle_taxe_achat_id"] = $article->getRegleTaxeAchat()->getId();
} else {
$tableau_insert["regle_taxe_achat_id"] = null;
}
$tableau_insert["cpump"] = null;
$tableau_insert["dateCalculCump"] = null;
$tableau_insert["sur_prestashop"] = null;
if ($article->getUniversel()) {
$tableau_insert["universel"] = 1;
} else {
$tableau_insert["universel"] = 0;
}
$tableau_insert["delai_reappro"] = $article->getDelaiReappro();
$tableau_insert["title_seo_web"] = null;
$tableau_insert["url_web"] = null;
$tableau_insert["ean"] = null;
$tableau_insert["prix_revient"] = $article->getPrixRevient();
$tableau_insert["frais_fonctionnement"] = $article->getFraisFonctionnement();
$tableau_insert["nomenclature_douaniere"] = $article->getNomenclatureDouaniere();
$tableau_insert["unspsc"] = $article->getUnspsc();
$tableau_insert["a_suggerer"] = 0;
$tableau_insert["divers_composes"] = 0;
$tableau_insert["nomenclature_validee"] = 0;
if (is_object($article->getTransporteur())) {
$tableau_insert["transporteur_id"] = $article->getTransporteur()->getId();
} else {
$tableau_insert["transporteur_id"] = null;
}
if (is_object($article->getAtelier())) {
$tableau_insert["atelier_id"] = $article->getAtelier()->getId();
} else {
$tableau_insert["atelier_id"] = null;
}
$tableau_insert["commentaire_dimensions"] = $article->getCommentaireDimensions();
$tableau_insert["condition_achat_defaut_id"] = null;
$tableau_insert["ecocontribution"] = $article->getEcocontribution();
$tableau_insert["id_import_2"] = null;
$tableau_insert["article_declinaison_parent_id"] = null;
$tableau_insert["declinaison"] = null;
if (is_object($article->getFamilleCompta())) {
$tableau_insert['famille_compta_id'] = $article->getFamilleCompta()->getId();
}
$tableau_insert['reference'] = $tab_declinaison["reference"];
$tableau_insert['libelle'] = $tab_declinaison["libelle"];
$tableau_insert['article_declinaison_parent_id'] = $article->getId();
$conn = $this->entityManager->getConnection();
$conn->insert('article__article', $tableau_insert);
$id_article = $conn->lastInsertId();
if ($id_article != "") {
$articleClone = $repo_article->find($id_article);
if (is_object($articleClone) && array_key_exists('copier_images', $post) && $post["copier_images"] == "1") {
$repo_article_image = $this->entityManager->getRepository(Image::class);
$images_article = $repo_article_image->findBy(["article" => $article]);
if (count($images_article) > 0) {
foreach ($images_article as $imageArticle) {
$image_parent = clone $imageArticle;
$image_parent->setArticle($articleClone);
$image_parent->setDate(new \Datetime());
$this->entityManager->persist($image_parent);
//$chemin_src ="uploads/articles/images/".$article->getDate()->format("Y")."/".$article->getDate()->format("m")."/".$article->getDate()->format("d")."/".$article->getId()."/*";
//$chemin_dest ="uploads/articles/images/".$articleparent->getDate()->format("Y")."/".$articleparent->getDate()->format("m")."/".$articleparent->getDate()->format("d")."/".$articleparent->getId()."/";
$tab_dossiers = ["large", "medium", "originals", "small", "thumbnails"];
for ($t = 0; $t < count($tab_dossiers); $t++) {
$chemin_src = "uploads/articles/images/".$article->getDate()->format("Y")."/".$article->getDate()->format("m")."/".$article->getDate()->format(
"d"
)."/".$article->getId()."/".$tab_dossiers[$t]."/".$image_parent->getUrl();
$chemin_dest = "uploads/articles/images/".$articleClone->getDate()->format("Y")."/".$articleClone->getDate()->format("m")."/".$articleClone->getDate()->format(
"d"
)."/".$articleClone->getId()."/".$tab_dossiers[$t]."/";
if ( ! is_dir($chemin_dest)) {
//echo "<div>CREATION</div>";
mkdir($chemin_dest, 0755, true);
chown($chemin_dest, "www-data");
chgrp($chemin_dest, "www-data");
chmod($chemin_dest, 0755);
}
exec("cp ".$chemin_src." ".$chemin_dest);
}
}
$this->entityManager->flush();
}
}
if (is_object($articleClone) && array_key_exists('copier_associes', $post) && $post["copier_associes"] == "1") {
if (count($article->getArticlesAssociesParent()) > 0) {
foreach ($article->getArticlesAssociesParent() as $artAss) {
$artAssClone = clone $artAss;
$artAssClone->setParent($articleClone);
$this->entityManager->persist($artAssClone);
}
$this->entityManager->flush();
}
}
if (is_object($articleClone) && array_key_exists('copier_categorie', $post) && $post["copier_categorie"] == "1") {
if (count($article->getArticleCategorie()) > 0) {
foreach ($article->getArticleCategorie() as $ac) {
if (is_object($ac->getCategorie())) {
$tableau_insert_cat = [];
$tableau_insert_cat["categorie_id"] = $ac->getCategorie()->getId();
$tableau_insert_cat["article_id"] = $id_article;
$tableau_insert_cat["position"] = $ac->getPosition();
$conn->insert('article__article_categorie', $tableau_insert_cat);
}
}
}
}
if (is_object($articleClone) && array_key_exists('copier_condVente', $post) && $post["copier_condVente"] == "1") {
$conditionsVente = $repo_cond_vente->findBy(["article" => $article]);
if (count($conditionsVente) > 0) {
foreach ($conditionsVente as $condVente) {
$condClone = clone $condVente;
$condClone->setArticle($articleClone);
$this->entityManager->persist($condClone);
}
$this->entityManager->flush();
}
}
if (is_object($articleClone) && array_key_exists('copier_emplacements', $post) && $post["copier_emplacements"] == "1") {
if (count($article->getEmplacements()) > 0) {
foreach ($article->getEmplacements() as $emp) {
$empClone = clone $emp;
$empClone->setArticle($articleClone);
$empClone->setStock(0);
$empClone->setStockReserve(0);
$this->entityManager->persist($empClone);
}
$this->entityManager->flush();
}
}
if (is_object($articleClone) && array_key_exists('copier_condHa', $post) && $post["copier_condHa"] == "1") {
if (count($article->getConditionsAchat()) > 0) {
foreach ($article->getConditionsAchat() as $cond) {
$condClone = clone $cond;
$condClone->setArticle($articleClone);
$this->entityManager->persist($condClone);
}
$this->entityManager->flush();
}
}
if (count($tab_declinaison["caracteritiques"]) > 0) {
foreach ($tab_declinaison["caracteritiques"] as $declinaison) {
$valeur_obj = $repo_valeurs->find($declinaison);
if (is_object($valeur_obj)) {
$tableau_declinaison = [];
$tableau_declinaison["article_id"] = $id_article;
$tableau_declinaison["attribut_article_id"] = $valeur_obj->getAttributArticle()->getId();
$tableau_declinaison["valeur_attribut_article_id"] = $valeur_obj->getId();
$conn->insert('article__declinaison', $tableau_declinaison);
}
}
}
}
}
public function getValeursAttribut($attribut)
{
$repo_valeurs = $this->entityManager->getRepository(ValeurAttributArticle::class);
$valeurs = $repo_valeurs->findBy(["attributArticle" => $attribut]);
return $valeurs;
}
public function getDeclinaisonArticle($article)
{
$repo_declinaison = $this->entityManager->getRepository(Declinaison::class);
$attributs = $repo_declinaison->findBy(["article" => $article]);
return $attributs;
}
public function getPrixLignes(Article $article, Commande $commande)
{
$repo_article_commande = $this->entityManager->getRepository(ArticleCommande::class);
$lignes = $repo_article_commande->getPrixLignes($article, $commande);
return $lignes;
}
public function getNombreDeLignes(Article $article, Commande $commande)
{
$repo_article_commande = $this->entityManager->getRepository(ArticleCommande::class);
$total = $repo_article_commande->getNombreDeLignes($article, $commande);
return $total;
}
public function getQuantiteTotale(Article $article, Commande $commande)
{
$repo_article_commande = $this->entityManager->getRepository(ArticleCommande::class);
$total = $repo_article_commande->getQuantiteTotale($article, $commande);
return $total;
}
public function qrCodeArticle(Article $article)
{
$url = $this->urlGenerator->generate('dtc_article_modifier', ["id" => $article->getId()], true);
$oQRC = new QrCode();
/*$oQRC->fullName('Pierre-Henry Soria') // Add Full Name
->nickName('PH7') // Add Nickname
->gender('M') // Add Gender
->email('ph7software@gmail.com') // Add Email Address
->impp('phs_7@aol.com') // Add Instant Messenger
->url('http://ph-7.github.com') // Add URL Website
->note('Hello to all! I am a web developer. As hobbies I like climbing and swimming ...') // Add Note
->categories('developer,designer,climber,swimmer') // Add Categories
->photo('http://files.phpclasses.org/picture/user/1122955.jpg') // Add Avatar
->lang('en-US') // Add Language
->finish(); // End vCard
*/
$oQRC
//->fullName($article->getLibelle()) // Add Full Name
//->nickName($article->getReference()) // Add Nickname
//->url($url) // Add URL Website
->urlErp($url) // Add URL Website
/*
->gender('M') // Add Gender
->email('ph7software@gmail.com') // Add Email Address
->impp('phs_7@aol.com') // Add Instant Messenger
->url('http://ph-7.github.com') // Add URL Website
->note('Hello to all! I am a web developer. As hobbies I like climbing and swimming ...') // Add Note
->categories('developer,designer,climber,swimmer') // Add Categories
->photo('http://files.phpclasses.org/picture/user/1122955.jpg') // Add Avatar
->lang('en-US') // Add Language
*/
->finish(); // End vCard
// echo '<p><img src="' . $oQRC->get(300) . '" alt="QR Code" /></p>'; // Generate and display the QR Code
return $oQRC;
//$oQRC->display(); // Display
}
public function pourcentageTraitementCalculCump(Cron $cron)
{
$pourcentage = 0;
//return $pourcentage;
$nbTotalArticle = $cron->getDescription();
$sql = "SELECT count(*) as total
FROM article__article
WHERE dateCalculCump = '".$cron->getDateDebut()->format("Y-m-d H:i:s")."'
";
$stmt = $this->entityManager->getConnection()->prepare($sql);
$existe = $stmt->executeQuery()->fetchAllAssociative();
$nbArticlesCalcule = $existe[0]["total"];
if ($nbTotalArticle > 0) {
$pourcentage = $nbArticlesCalcule / $nbTotalArticle * 100;
} else {
$pourcentage = 0;
}
return $pourcentage;
}
public function getConditionsAchat($id)
{
$article = $this->entityManager->getRepository(Article::class)->find($id);
$repo_condha = $this->entityManager->getRepository(ConditionAchat::class);
$condHa = $repo_condha->getConditionsAchatArticle($article);
return $condHa;
}
public function getLibelle($id)
{
$article = $this->entityManager->getRepository(Article::class)->find($id);
return $article->getLibelle();
}
public function getRalClientArticle(Article $article)
{
$repo_article_composant = $this->entityManager->getRepository(ArticleComposant::class);
$composants = $repo_article_composant->getComposantsComposeVirtuel($article)->getQuery()->getResult();
$repoCommande = $this->entityManager->getRepository(Commande::class);
$repoArticleCommande = $this->entityManager->getRepository(ArticleCommande::class);
$reservations = $repoArticleCommande->getRalClientEtCmdAssociees($article, $composants);
if (count($reservations) > 0) {
foreach ($reservations as $key => $r) {
if (array_key_exists('0', $r) && array_key_exists('typeDocInitial', $r[0])) {
$reservations[$key][0]["masque"] = 0;
$reservations[$key][0]["ral_calcule"] = $reservations[$key][0]["ral_quantite"];
}
if (array_key_exists('0', $r) && array_key_exists('typeDocInitial', $r[0]) && $r[0]["typeDocInitial"] == "2") {
$ral_quantite = $r[0]["ral_quantite"];
$commande_id = $r[0]["commandeId"];
$article_id = $r[0]["articleId"];
$commande = $repoCommande->find($commande_id);
if (is_object($commande)) {
$totalPrepare = 0;
$sql = "SELECT ac.id,ac.article_commande_parent_id
FROM commerciale__article_commande ac
LEFT JOIN commerciale__commande c ON ac.commande_id = c.id
LEFT JOIN commerciale__statut_commande s ON c.statut_commande_id = s.id
WHERE ac.article_id = ".$article_id."
AND c.id IN (".$commande_id.")
AND s.ordre NOT IN (0)
LIMIT 0,1000000000
";
$stmt = $this->entityManager->getConnection()->prepare($sql);
$existe = $stmt->executeQuery()->fetchAllAssociative();
if (count($existe) > 0) {
for ($r = 0; $r < count($existe); $r++) {
//print_r($existe);
$acObjet = $repoArticleCommande->find($existe[$r]["id"]);
if (is_object($acObjet)) {
$totalPrepare = $totalPrepare + $repoArticleCommande->totalPrepare($commande, $acObjet, $origine = "bp");
//echo "<div>totalPrepare BP".$totalPrepare." RAL ".$ral_quantite."</div>";
}
}
}
//echo "<div>totalPrepare BP FINAL ".$totalPrepare." RAL ".$ral_quantite."</div>";
if ($totalPrepare >= $ral_quantite) {
//unset($reservations[$key]);
$reservations[$key][0]["masque"] = 1;
$reservations[$key][0]["masque"] = 0;
} elseif ($totalPrepare > 0 && $totalPrepare < $ral_quantite) {
$reservations[$key][0]["ral_quantite"] = $reservations[$key][0]["quantite"];
$reservations[$key][0]["ral_quantite"] -= $totalPrepare;
}
}
} elseif (array_key_exists('0', $r) && array_key_exists('typeDocInitial', $r[0]) && $r[0]["typeDocInitial"] == "3") {
$ral_quantite = $r[0]["ral_quantite"];
$commande_id = $r[0]["commandeId"];
$article_id = $r[0]["articleId"];
$commande = $repoCommande->find($commande_id);
if (is_object($commande)) {
$sql = "SELECT id,article_commande_parent_id
FROM commerciale__article_commande
WHERE article_id = ".$article_id."
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)
LIMIT 0,1
";
$stmt = $this->entityManager->getConnection()->prepare($sql);
$stmt->execute();
$existe = $stmt->fetchAllAssociative();
if (count($existe) > 0) {
$acObjet = $repoArticleCommande->find($existe[0]["id"]);
if (is_object($acObjet)) {
$totalPrepare = $repoArticleCommande->totalPrepare($commande, $acObjet, $origine = "bpa");
//echo "<div>totalPrepare ".$totalPrepare."</div>";
if ($totalPrepare >= $ral_quantite) {
$reservations[$key][0]["masque"] = 1;
//unset($reservations[$key]);
} elseif ($totalPrepare > 0 && $totalPrepare < $ral_quantite) {
$reservations[$key][0]["ral_quantite"] -= $totalPrepare;
}
}
}
//echo "<div>".$sql."</div>";
//echo "<div>(".$key.") typeDocInitial ".$r[0]["typeDocInitial"]."</div>";
}
//totalPrepare(Commande $commande,ArticleCommande $articleCommande,$origine="bpa")
}
//print_r($reservations[$key]);
// echo "<br/>**************************<br/>";
}
}
return $reservations;
}
public function getRafArticle(Article $article)
{
$repoArticleCommande = $this->entityManager->getRepository(ArticleCommande::class);
$reservations = $repoArticleCommande->getReservationsFabrications($article);
return $reservations;
}
public function majEquivalence($valeurs)
{
//print_r($valeurs);
//echo "<div>--------</div>";
//print_r($valeurs['articlesEquivalents']);
//echo "<div>--------</div>";
if (array_key_exists('articlesEquivalents', $valeurs)) {
foreach ($valeurs['articlesEquivalents'] as $key => $value) {
//echo "<div>".$key."--------</div>";
if(!is_array($value)) {
$value = [$value];
}
$reciproque = $value;
//print_r($value);
for ($i = 0, $iMax = count($reciproque); $i < $iMax; $i++) {
$sql = "DELETE FROM `article_article` WHERE article_source=".$reciproque[$i]." and article_target=".$key."";
$stmt = $this->entityManager->getConnection()->prepare($sql);
$stmt->execute();
}
}
}
//echo "<div>###############</div>";
if (array_key_exists('articles', $valeurs)) {
for ($i = 0; $i < count($valeurs['articles']); $i++) {
//echo "<div>ART : ".$valeurs['articles'][$i]."</div>";
$id_article = $valeurs['articles'][$i];
$sql = "DELETE FROM `article_article` WHERE article_source=".$id_article."";
$stmt = $this->entityManager->getConnection()->prepare($sql);
$stmt->executeQuery();
if (array_key_exists('equivalence', $valeurs)) {
if (array_key_exists($id_article, $valeurs['equivalence'])) {
foreach ($valeurs['equivalence'][$id_article] as $key => $value) {
//echo "<div>EQUIVALENCE : ".$key."</div>";
$sql = "INSERT INTO `article_article` (article_source, article_target) VALUES (".$id_article.",".$key.")";
$stmt = $this->entityManager->getConnection()->prepare($sql);
$stmt->executeQuery();
}
}
}
//echo "<div>--------</div>";
if (array_key_exists('reciproque', $valeurs)) {
if (array_key_exists($id_article, $valeurs['reciproque'])) {
foreach ($valeurs['reciproque'][$id_article] as $key => $value) {
//echo "<div>RECIPROQUE : ".$key."</div>";
$sql = "SELECT count(*) as total FROM `article_article` WHERE article_source=".$key." and article_target=".$id_article."";
$stmt = $this->entityManager->getConnection()->prepare($sql);
$query = $stmt->executeQuery();
$existe = $query->fetchAllAssociative();
if ($existe[0]['total'] == 0) {
$sql = "INSERT INTO `article_article` (article_source, article_target) VALUES (".$key.",".$id_article.")";
$stmt = $this->entityManager->getConnection()->prepare($sql);
$stmt->executeQuery();
}
}
}
}
// echo "<div>----------------</div>";
// echo "<div>----------------</div>";
}
}
}
public function estUneEquivalenceReciproque($article_equivalent, $article_source)
{
$repo_article = $this->entityManager->getRepository(Article::class);
$est_reciproque = $repo_article->estUneEquivalenceReciproque($article_equivalent, $article_source);
return $est_reciproque;
}
public function getEquivalences($idArticle)
{
$repo_article = $this->entityManager->getRepository(Article::class);
$equivalences = $repo_article->getArticleEquivalent($idArticle);
return $equivalences;
}
public function getDernierPrixAchat($idArticle, $date)
{
$repo_article = $this->entityManager->getRepository(Article::class);
$prix = $repo_article->getDernierPrixAchat($idArticle, $date);
return $prix;
}
public function getPrixAchat($idArticle, $date)
{
$repo_article = $this->entityManager->getRepository(Article::class);
$prix = $repo_article->getPrixAchat($idArticle, $date);
return $prix;
}
public function getCump($idArticle, $date)
{
$repo_article = $this->entityManager->getRepository(MouvementStock::class);
$mvt = $repo_article->getDernierMouvementDateHeure($idArticle, $date);
//print_r($date);
return $mvt['cpump'];
}
public function getStockArticle($idArticle, $date)
{
$repo_article = $this->entityManager->getRepository(MouvementStock::class);
$mvt = $repo_article->getDernierMouvementDateHeure($idArticle, $date);
//print_r($date);
return floatval($mvt['stock']);
}
public function getCumpOuPrixCondHa($idArticle, $date = '')
{
$repo_article = $this->entityManager->getRepository(MouvementStock::class);
$mvt = $repo_article->getDernierMouvementDateHeure($idArticle, $date);
if ($mvt['cpump'] == '' || $mvt['cpump'] == 0 || $mvt['cpump'] == '0') {
$repo_condha = $this->entityManager->getRepository(ConditionAchat::class);
$condHa = $repo_condha->findOneBy(["article" => $idArticle, "defaut" => 1]);
if (is_object($condHa)) {
$prix = $condHa->getPrixAchatNet();
$coefficientConditionnement = $condHa->getCoefficientConditionnement();
if ($coefficientConditionnement != 0) {
$prix = $prix / $coefficientConditionnement;
}
$fournisseur = $condHa->getFournisseur();
if (is_object($fournisseur)) {
$devise = $fournisseur->getDevise();
if (is_object($devise)) {
$tauxChange = $devise->getTauxChange();
if ($tauxChange != 0) {
$prix = $prix * $tauxChange;
}
}
}
return $prix;
}
}
return $mvt['cpump'];
}
public function getCumpOuPrixCondHaAc($idArticle, $date = '', $quantite)
{
//$repo_article_commande = $this->em->getRepository(ArticleCommande::class);
$repo_article = $this->entityManager->getRepository(Article::class);
//$ac = $repo_article_commande->find($idArticleCommande);
$article = $repo_article->find($idArticle);
$qteAfabriquer = 0;
if ($article->getStock() >= 0) {
$qteAfabriquer = $quantite - $article->getStock();
} else {
$qteAfabriquer = $quantite;
}
$qteAfabriquer = max(0, $qteAfabriquer);
$qteStock = $quantite - $qteAfabriquer;
$cumpStock = 0;
$cumpFabrication = 0;
$repo_article = $this->entityManager->getRepository(MouvementStock::class);
$mvt = $repo_article->getDernierMouvementDateHeure($article->getId(), $date);
//si il n'y a pas assez de stock ou si le cump est nul, il faut recuperer le prix de la cond HA
if ($mvt['cpump'] == '' || $mvt['cpump'] == 0 || $mvt['cpump'] == '0' || ($qteAfabriquer > 0)) {
$repo_condha = $this->entityManager->getRepository(ConditionAchat::class);
$condHa = $repo_condha->findOneBy(["article" => $article, "defaut" => 1]);
if (is_object($condHa)) {
$prix = $condHa->getPrixAchatNet();
$coefficientConditionnement = $condHa->getCoefficientConditionnement();
if ($coefficientConditionnement != 0) {
$prix = $prix / $coefficientConditionnement;
}
$fournisseur = $condHa->getFournisseur();
if (is_object($fournisseur)) {
$devise = $fournisseur->getDevise();
if (is_object($devise)) {
$tauxChange = $devise->getTauxChange();
if ($tauxChange != 0) {
$prix = $prix * $tauxChange;
}
}
}
//return $prix;
$cumpFabrication = $prix;
$cumpStock = $prix;
}
} else {
$cumpStock = $mvt['cpump'];
}
$total = (($qteStock * $cumpStock) + ($qteAfabriquer * $cumpFabrication)) / $quantite;
return $total;
}
public function getCumpFabrication($article, $recursif = false)
{
$total = 0;
$composants = $article->getArticlesComposants();
if (count($composants) > 0) {
$conditionAchatParDefaut = $this->getConditionAchatParDefaut($article);
foreach ($composants as $composant) {
$articleTmp = $composant->getArticle();
if ($articleTmp->getProduitInterne() == 1 && $recursif) {
$valeur = $this->getCumpFabrication($articleTmp, $recursif);
} else {
$conditionAchatParDefautTmp = "";
if (is_object($conditionAchatParDefaut) && $conditionAchatParDefaut->getFournisseur()->getReference() == '12000') {
$conditionAchatParDefautTmp = $this->getConditionAchatParDefaut($articleTmp);
}
if (is_object($conditionAchatParDefautTmp)) {
$valeur = round($conditionAchatParDefautTmp->getPrixAchatNet(), 2);
$coeffCond = $conditionAchatParDefautTmp->getCoefficientConditionnement();
if ($coeffCond != 0) {
$valeur = $valeur / $coeffCond;
}
$devise = $conditionAchatParDefautTmp->getFournisseur()->getDevise();
if (is_object($devise) && $devise->getTauxChange() != 0) {
$valeur = $valeur * floatval($devise->getTauxChange());
}
} elseif ($articleTmp->getCpump() != 0) {
$valeur = round(floatval($articleTmp->getCpump()), 2);
} else {
$valeur = round(floatval($articleTmp->getPrixBase()), 2);
}
}
$total += $valeur * $composant->getQuantite();
}
}
//{% if composant.article.produitInterne == 1 %}
return $total;
}
public function getCumpFabrication2($article, $recursif = false)
{
$total = 0;
$composants = $article->getArticlesComposants();
if (count($composants) > 0) {
foreach ($composants as $composant) {
$articleTmp = $composant->getArticle();
if ($articleTmp->getProduitInterne() == 1 && $recursif && $articleTmp->getStock() <= 0) {
$valeur = $this->getCumpFabrication2($articleTmp, $recursif);
} else {
$valeur = $this->getCumpOuPrixCondHa($articleTmp);
}
$total += $valeur * $composant->getQuantite();
}
}
//{% if composant.article.produitInterne == 1 %}
return $total;
}
public function getCumpFabrication3($article, $recursif = false, $quantite)
{
$total = 0;
$composants = $article->getArticlesComposants();
if (count($composants) > 0) {
foreach ($composants as $composant) {
$articleTmp = $composant->getArticle();
if ($articleTmp->getProduitInterne() == 1 && $recursif && $articleTmp->getStock() < $quantite) {
$valeur = $this->getCumpFabrication3($articleTmp, $recursif, $quantite);
} else {
$valeur = $this->getCumpOuPrixCondHaAc($articleTmp, '', $quantite);
}
$total += $valeur * $composant->getQuantite();
}
}
//{% if composant.article.produitInterne == 1 %}
return $total;
}
public function getTotalImage(Article $article)
{
$repo_image = $this->entityManager->getRepository(Image::class);
$total = $repo_image->getTotalImageArticle($article);
return $total['total'];
}
public function getTotalDocument(Article $article)
{
$repo_document = $this->entityManager->getRepository(Document::class);
$total = $repo_document->getTotalDocumentArticle($article);
return $total['total'];
}
public function getTotalPromos(Article $article)
{
$repo_prix = $this->entityManager->getRepository(PrixPromo::class);
$total = $repo_prix->getTotalPrixPromoArticle($article);
return $total['total'];
}
public function getTotalVente(Article $article)
{
$repo_article_commande = $this->entityManager->getRepository(ArticleCommande::class);
$total = $repo_article_commande->getTotalVenteArticle($article);
return $total['total'];
}
public function getApplicationsArticle(Article $article)
{
$repo_application = $this->entityManager->getRepository(Application::class);
$applications = $repo_application->ApplicationsArticle($article);
return $applications;
}
public function getTotalApplication(Article $article)
{
$repo_application = $this->entityManager->getRepository(Application::class);
$total = $repo_application->getTotalApplicationArticle($article);
return $total['total'];
}
public function getTotalConditionVente(Article $article)
{
$repo_condition_achat = $this->entityManager->getRepository(ConditionVente::class);
$total = $repo_condition_achat->getTotalConditionVenteArticle($article);
return $total['total'];
}
public function getTotalPrixDegressif(Article $article)
{
$repo_condition_achat = $this->entityManager->getRepository(PrixDegressif::class);
$total = $repo_condition_achat->getTotalPrixDegressifArticle($article);
return $total['total'];
}
public function getTotalColis(Article $article)
{
$repo_colis = $this->entityManager->getRepository(Colis::class);
$total = $repo_colis->getTotalColisArticle($article);
return $total['total'];
}
public function getTotalConcurrenceArticle(Article $article)
{
$repo_concurrence = $this->entityManager->getRepository(Concurrence::class);
$total = $repo_concurrence->getTotalConcurrenceArticle($article);
return $total['total'];
}
public function getTotalConditionAchat(Article $article)
{
$repo_condition_achat = $this->entityManager->getRepository(ConditionAchat::class);
$total = $repo_condition_achat->getTotalConditionAchatArticle($article);
return $total['total'];
}
public function getTotalTvaCommandeParTaux(Commande $commande, $taux)
{
$repo_article_commande = $this->entityManager->getRepository(ArticleCommande::class);
$totalTva = $repo_article_commande->getTotalTvaParTaux($commande, $taux);
return $totalTva;
}
public function getTotalTvaCommandeParTaxe(Commande $commande, $taxe)
{
$repo_article_commande = $this->entityManager->getRepository(ArticleCommande::class);
$totalTva = $repo_article_commande->getTotalTvaParTaxe($commande, $taxe);
return $totalTva;
}
public function getTotalTvaCommandeFParTaux($commande, $taux)
{
$taux = floatval($taux);
$repo_article_commande = $this->entityManager->getRepository(ArticleCommande::class);
$totalTva = $repo_article_commande->getTotalTvaParTauxCF($commande, $taux);
return $totalTva;
}
public function getTotalBaseHTParTaux(Commande $commande, $taux)
{
$repo_article_commande = $this->entityManager->getRepository(ArticleCommande::class);
$totalTva = $repo_article_commande->getTotalBaseHTParTaux($commande, $taux);
return $totalTva;
}
public function getTotalBaseHTParTauxCF(CommandeFournisseur $commande, $taux)
{
$repo_article_commande = $this->entityManager->getRepository(ArticleCommande::class);
$totalTva = $repo_article_commande->getTotalBaseHTParTauxCF($commande, $taux);
return $totalTva;
}
public function getTva2($ac, $clientId="", $adresseLivraisonId="", $adresseFacturationId="") {
$taxe = '';
$tauxTva = '';
$client = '';
$adresseLivraison = '';
$adresseFacturation = '';
$zoneLivraison = '';
$zoneFacturation = '';
$article = '';
if(is_object($ac)){
$taxe = $ac->getTaxe();
$tauxTva = $ac->getTva();
if(is_object($ac->getCommande()) && is_object($ac->getCommande()->getClient())) {
$client = $ac->getCommande()->getClient();
}
if(is_object($ac->getCommande()) && is_object($ac->getCommande()->getAdresseLivraison())) {
$zoneLivraison = $ac->getCommande()->getAdresseLivraison()->getZoneLivraison();
$adresseLivraison = $ac->getCommande()->getAdresseLivraison();
}
if(is_object($ac->getCommande()) && is_object($ac->getCommande()->getAdresseFacturation())) {
$zoneFacturation = $ac->getCommande()->getAdresseFacturation()->getZoneLivraison();
}
$article = $ac->getArticle();
} else {
if(array_key_exists('article', $ac)) $article = $ac['article'];
if(array_key_exists('article_id', $ac)) $article = $this->entityManager->getRepository('DTCArticlesBundle:Article')->find($ac['article_id']);
if(array_key_exists('taxe_id', $ac)) $taxe = $this->entityManager->getRepository(Taxe::class)->find($ac['taxe_id']);
if(array_key_exists('tva', $ac)) $tauxTva = $ac['tva'];
if(!empty($clientId)) $client = $this->entityManager->getRepository('DTCClientsBundle:Client')->find($clientId);
if(!empty($adresseLivraisonId)){
$adresseLivraison = $this->entityManager->getRepository('DTCAdressesBundle:Adresse')->find($adresseLivraisonId);
if(is_object($adresseLivraison)) $zoneLivraison = $adresseLivraison->getZoneLivraison();
}
if(!empty($adresseFacturationId)){
$adresseFacturation = $this->entityManager->getRepository('DTCAdressesBundle:Adresse')->find($adresseFacturationId);
if(is_object($adresseFacturation)) $zoneFacturation = $adresseFacturation->getZoneLivraison();
}
}
$array = array('id'=>'','taux'=>$tauxTva);
if(is_object($taxe)) {
$array['id'] = $taxe->getId();
if($array['taux'] == '') $array['taux'] = $taxe->getTaux();
} else {
if ($array['taux'] != '') {
$taxeDefaut = $this->entityManager->getRepository(Taxe::class)->findOneBy(['taux' => $array['taux']]);
} else {
$taxeDefaut = $this->getTaxeClientAdresses($article->getRegleTaxe(), $client, $adresseLivraison, $adresseFacturation);
}
if(is_object(($taxeDefaut))){
$array['id'] = $taxeDefaut->getId();
if ($array['taux'] == '') $array['taux'] = $taxeDefaut->getTaux();
}
}
if(empty($array['id'])){
$taxeDefaut = $this->entityManager->getRepository(Taxe::class)->find(1);
if(is_object(($taxeDefaut))){
$array['id'] = $taxeDefaut->getId();
$array['taux'] = $taxeDefaut->getTaux();
}
}
return $array;
}
public function getTaxeClientAdresses($regleTaxe, $client, $adresseLivraison, $adresseFacturation){
// echo "getTaxeClientAdresses";
if($this->entityManager->getFilters()->isEnabled('softdeleteable')) {
$this->entityManager->getFilters()->disable('softdeleteable');
}
$zoneLivraison = '';
$zoneFacturation = '';
if(is_object($adresseLivraison)) $zoneLivraison = $adresseLivraison->getZoneLivraison();
if(is_object($adresseFacturation)) $zoneFacturation = $adresseFacturation->getZoneLivraison();
$taxeDefaut = $this->entityManager->getRepository(Taxe::class)->find(1);
if(is_object($regleTaxe) && empty($regleTaxe->getTauxDefaut())){
// echo "AAAA";
$taxeDefaut = $this->entityManager->getRepository(Taxe::class)->find(5);
} elseif (is_object($client) && !$client->getTva()) {
// echo "BBBB";
$taxeDefaut = $this->entityManager->getRepository(Taxe::class)->find(5);
} elseif(is_object($client) && is_object($zoneLivraison) && (
(is_object($zoneFacturation) && $client->isSociete() && in_array($zoneFacturation->getTypeZoneLivraison(), [TypeZoneLivraison::MONDE, TypeZoneLivraison::DOM])
&& in_array($zoneLivraison->getTypeZoneLivraison(), [TypeZoneLivraison::UE]))
|| (!$client->isSociete() && in_array($zoneLivraison->getTypeZoneLivraison(), [TypeZoneLivraison::UE,TypeZoneLivraison::FR]))
|| ($client->isSociete() && in_array($zoneLivraison->getTypeZoneLivraison(), [TypeZoneLivraison::FR]))
)) {
// echo "CCC";
//TVA PAYS
if(is_object($adresseLivraison)){
//$repo_tva_pays = $this->entityManager->getRepository('DTCTaxesBundle:RegleTaxeZoneLivraison');
$repo_tva_pays = $this->entityManager->getRepository(RegleTaxeZoneLivraison::class);
$pays = $adresseLivraison->getZoneLivraison();
if(is_object($pays) && is_object($regleTaxe)){
$regleTaxePays = $repo_tva_pays->findOneBy(array("zoneLivraison"=>$pays,"regleTaxe"=>$regleTaxe));
if(is_object($regleTaxePays)){
$taxeDefaut = $regleTaxePays->getTaxe();
}
}
}
} elseif(is_object($client) && (
(is_object($zoneLivraison) && in_array($zoneLivraison->getTypeZoneLivraison(), [TypeZoneLivraison::MONDE, TypeZoneLivraison::DOM]))
|| (is_object($zoneFacturation) && !in_array($zoneFacturation->getTypeZoneLivraison(), [TypeZoneLivraison::FR]) && is_object($zoneLivraison) && $client->isSociete() && in_array($zoneLivraison->getTypeZoneLivraison(), [TypeZoneLivraison::UE]))//forcer FR
)) {
// echo "DDDD";
//sans TVA
$taxeDefaut = $this->entityManager->getRepository(Taxe::class)->find(5);
}
$this->entityManager->getFilters()->enable('softdeleteable');
return $taxeDefaut;
}
public function getTva(Article $article, $facturation = '', $client = '', $adresse = '')
{
$array = ['id' => 0, 'taux' => 0];
$tva = "0";
$regleTaxe = $article->getRegleTaxe();
if (is_object($facturation)) {
} else {
$repo_zone = $this->entityManager->getRepository(Zone::class);
$repo_tva_pays = $this->entityManager->getRepository(RegleTaxePays::class);
$pays = $repo_zone->find(370095);
$tvaPays = $repo_tva_pays->findOneBy(["pays" => $pays, "regleTaxe" => $regleTaxe]);
//if(!is_object($tvaPays)) return "20";
//if(!is_object($tvaPays->getTaxe())) return "20";
if (is_object($tvaPays)) {
$taxe = $tvaPays->getTaxe();
if (is_object($taxe)) {
$array['id'] = $taxe->getId();
$array['taux'] = $taxe->getTaux();
}
}
}
return $array;
}
public function getTaxe($article = '', $client = '', $adresse = '', $codeIso = '')
{
//Taxe par défaut
//$taxe = $this->em->getRepository(Taxe::class)->find(5);//taux nul
$taxe = $this->entityManager->getRepository(Taxe::class)->find(1);//Taux standard (20%)
$regleTaxe = $this->entityManager->getRepository(RegleTaxe::class)->find(1);
if ($codeIso != '') {
$pays = $this->entityManager->getRepository(Zone::class)->findOneBy([
'dateSuppression' => null,
'type' => 1,
'codeIso' => $codeIso,
]);
if (is_object($regleTaxe) && is_object($pays)) {
$tvaPays = $this->entityManager->getRepository(RegleTaxePays::class)->findOneBy(["pays" => $pays, "regleTaxe" => $regleTaxe]);
if (is_object($tvaPays) && is_object($tvaPays->getTaxe())) {
$taxe = $tvaPays->getTaxe();
}
}
} elseif (is_object($adresse) && is_object($adresse->getPays()) && ! $adresse->getPays()->getEurope()) {
//adresse hors UE -> pas de TVA
$taxe = $this->entityManager->getRepository(Taxe::class)->find(5);//taux nul
//} elseif (is_object($client) && ! empty($client->getNumTva()) && $this->clientService->estPro($client) && is_object($adresse) && is_object(
} elseif (1!=1 and is_object($client) && ! empty($client->getNumTva()) && $this->clientService->estPro($client) && is_object($adresse) && is_object(
$adresse->getPays()
) && $adresse->getPays()->getEurope()) {
//client pro et adresse UE avec num de tva intracommunautaire -> pas de TVA
$taxe = $this->entityManager->getRepository(Taxe::class)->find(5);//taux nul
} else {
// sinon -> TVA
// changement au 1/07/2021 -> facturation de la TVA du pays destinataire
$pays = $this->entityManager->getRepository(Zone::class)->find(370095);
if (is_object($adresse) && is_object($adresse->getPays())) {
$pays = $adresse->getPays();
}
if (is_object($article) && is_object($article->getRegleTaxe())) {
$regleTaxe = $article->getRegleTaxe();
}
if (is_object($regleTaxe) && is_object($pays)) {
$tvaPays = $this->entityManager->getRepository(RegleTaxePays::class)->findOneBy(["pays" => $pays, "regleTaxe" => $regleTaxe]);
if (is_object($tvaPays) && is_object($tvaPays->getTaxe())) {
$taxe = $tvaPays->getTaxe();
}
}
}
return $taxe;
/*
if(is_object($taxe)) {
$array['id'] = $taxe->getId();
$array['taux'] = $taxe->getTaux();
}
return $array;
*/
}
public function getRemisesPossibleArticleClient($a = '', $client = '', $montantTotal = '', $prix = '', $commande = '')
{
$remise_tampon = 0;
//getRemisesPossible($a = '', $client = '', $montantTotal = '', $prix = '', $commande = '')
if(!is_object($a["article"])) {
$a["article"] = $this->entityManager->getReference(Article::class, (int)$a["article"]);
$prix = $a['article']->getPrixVente();
}
else {
$prix = $a['article']->getPrixVente();
}
$remise_valeurs = ["valeur" => "", "type" => "", "remiseEnEuros" => "0", "remiseId" => "","prixRemise"=>$prix];
$liste_remise = $this->getRemisesPossible($a,$client,$prix,$montantTotal,$prix,$commande);
if (is_array($liste_remise) || is_object($liste_remise)) {
foreach ($liste_remise as $remise) {
/** @var Remise $remise */
//echo "<div>".$remise->getId()." ".$remise->getMontant()." ".$remise->getTypeReduction()."</div>";
if (is_object($remise)) {
if ($remise->getTypeReduction() == "montant") {
if ($remise->getMontant() > $remise_tampon) {
$remise_valeurs['valeur'] = $remise->getMontant();
$remise_valeurs['type'] = "€";
$remise_valeurs['remiseEnEuros'] = $remise->getMontant();
$remise_valeurs['remiseId'] = $remise->getId();
$remise_valeurs['prixRemise'] = $prix-$remise->getMontant();
$remise_tampon = $remise->getMontant();
}
} elseif ($remise->getTypeReduction() == "pourcentage") {
$remiseEnEuros = $prix * $remise->getMontant() / 100;
if ($remiseEnEuros > $remise_tampon) {
$prixRemise = $prix - ($prix * ($remise->getMontant() / 100));
$remise_valeurs['valeur'] = $remise->getMontant();
$remise_valeurs['type'] = "%";
$remise_valeurs['remiseEnEuros'] = $remiseEnEuros;
$remise_valeurs['remiseId'] = $remise->getId();
$remise_valeurs['prixRemise'] = $prixRemise;
$remise_tampon = $remiseEnEuros;
}
}
}
}
}
return $remise_valeurs;
}
public function getRemisesPossible($a = '', $client = '', $montantTotal = '', $prix = '', $commande = '')
{
$dateJ = new \Datetime();
$conn = $this->entityManager->getConnection();
if (is_object($a)) {
$idArticle = $a->getArticle()->getId();
$obj_article = $a->getArticle();
} else {
$idArticle = $a['article']->getId();
$obj_article = $a['article'];
}
$idClient = '';
if (is_object($client)) {
$idClient = $client->getId();
}
$idMarque = "";
if (is_object($obj_article) and is_object($obj_article->getMarque())) {
$idMarque = $obj_article->getMarque()->getId();
}
$idCategRemiseArticle = "";
if (is_object($obj_article->getCategorieRemiseArticle())) {
$idCategRemiseArticle = $obj_article->getCategorieRemiseArticle()->getId();
}
$idCategRemiseClient = "";
if (is_object($client)) {
foreach ($client->getcategorieRemiseClientClient() as $crcc) {
if (is_object($crcc->getCategorieRemiseClient())) {
$idCategRemiseClient .= $crcc->getCategorieRemiseClient()->getId().',';
}
}
}
$idCategRemiseClient .= ',|';
$idCategRemiseClient = str_replace(',,|', '', $idCategRemiseClient);
$idCategRemiseClient = str_replace(',|', '', $idCategRemiseClient);
$idCategArticle = "";
foreach ($obj_article->getArticleCategorie() as $ac) {
if (is_object($ac->getCategorie())) {
$idCategArticle .= $ac->getCategorie()->getId().',';
}
}
$idCategArticle .= ',|';
$idCategArticle = str_replace(',,|', '', $idCategArticle);
$idCategArticle = str_replace(',|', '', $idCategArticle);
$idCategClient = "";
if (is_object($client)) {
foreach ($client->getClientCategorie() as $ac) {
if (is_object($ac->getCategorie())) {
$idCategClient .= $ac->getCategorie()->getId().',';
}
}
}
$idCategClient .= ',|';
$idCategClient = str_replace(',,|', '', $idCategClient);
$idCategClient = str_replace(',|', '', $idCategClient);
//echo "<div>AC : ".$a->getId()."</div>";
/*
echo "<div>ART : ".$idArticle."</div>";
echo "<div>C : ".$client->getNom()." (".$idClient.")</div>";
echo "<div>MARQUE : ".$idMarque."</div>";
echo "<div>ID CAT REM ARTICLE : ".$idCategRemiseArticle."</div>";
echo "<div>ID CAT REM CLIENT : ".$idCategRemiseClient."</div>";
echo "<div>ID CAT ARTICLE : ".$idCategArticle."</div>";
echo "<div>ID CAT CLIENT : ".$idCategClient."</div>";
*/
if ($idCategClient != "") {
$sql_categ_client = "
AND
(
r.id IN (SELECT remise_id FROM remise__remise_categorie_client m WHERE m.categorie_id IN (".$idCategClient.") AND m.dateSuppression IS NULL)
OR
r.id NOT IN (SELECT remise_id FROM remise__remise_categorie_client m WHERE m.dateSuppression IS NULL)
)
";
} else {
$sql_categ_client = "
AND
(
r.id NOT IN (SELECT remise_id FROM remise__remise_categorie_client m WHERE m.dateSuppression IS NULL)
)
";
}
if ($idCategArticle != "") {
$sql_categ_article = "
AND
(
r.id IN (SELECT remise_id FROM remise__remise_categorie_article m WHERE m.categorie_id IN (".$idCategArticle.") AND m.dateSuppression IS NULL)
OR
r.id NOT IN (SELECT remise_id FROM remise__remise_categorie_article m WHERE m.dateSuppression IS NULL)
)
";
} else {
$sql_categ_article = "
AND
(
r.id NOT IN (SELECT remise_id FROM remise__remise_categorie_article m WHERE m.dateSuppression IS NULL)
)
";
}
if ($idCategRemiseClient != "") {
$sql_categ_remise_client = "
AND
(
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)
OR
r.id NOT IN (SELECT remise_id FROM remise__categorie_remise_client_remise m WHERE m.dateSuppression IS NULL)
)
";
} else {
$sql_categ_remise_client = "
AND
(
r.id NOT IN (SELECT remise_id FROM remise__categorie_remise_client_remise m WHERE m.dateSuppression IS NULL)
)
";
}
if ($idMarque != "") {
$sql_marque = "
AND
(
r.id IN (SELECT remise_id FROM remise__remise_marque_article m WHERE m.marque_id = '".$idMarque."' AND m.dateSuppression IS NULL)
OR
r.id NOT IN (SELECT remise_id FROM remise__remise_marque_article m WHERE m.dateSuppression IS NULL)
)
";
} else {
$sql_marque = "
AND
(
r.id NOT IN (SELECT remise_id FROM remise__remise_marque_article m WHERE m.dateSuppression IS NULL)
)
";
}
if ($idCategRemiseArticle != "") {
$sql_categ_remise_article = "
AND
(
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)
OR
r.id NOT IN (SELECT remise_id FROM remise__categorie_remise_article_remise m WHERE m.dateSuppression IS NULL)
)
";
} else {
$sql_categ_remise_article = "
AND
(
r.id NOT IN (SELECT remise_id FROM remise__categorie_remise_article_remise m WHERE m.dateSuppression IS NULL)
)
";
}
$sql = "SELECT id,libelle
FROM
remise__remise r
WHERE
r.dateSuppression IS NULL
AND
r.statut = 1
AND
r.date_debut <= '".$dateJ->format("Y-m-d H:i:s")."'
AND
r.date_fin >= '".$dateJ->format("Y-m-d H:i:s")."'
AND
r.quantite_restante > 0
AND
r.parent_id IS NULL
AND
(r.article_id IS NULL OR r.article_id = '".$idArticle."')
AND
(r.client_id IS NULL OR r.client_id = '".$idClient."')
".$sql_marque."
".$sql_categ_remise_article."
".$sql_categ_remise_client."
".$sql_categ_article."
".$sql_categ_client."
";
// echo "<div style='margin-bottom : 20px;margin-top:10px;border:1px solid red;'>".$sql."</div>";
//exit;
//$sql = "SELECT id,nom FROM client__client WHERE id='53' or id='4181'";
$results = $conn->executeQuery($sql)->fetchAllAssociative();
//print_r($results);
$tab_remise = [];
$repo_remise = $this->entityManager->getRepository(Remise::class);
for ($i = 0; $i < count($results); $i++) {
//echo "<div style='margin-top:10px;'>".$results[$i]['id']." ".$results[$i]['libelle']."</div>";
//echo "<hr/>";
$tab_remise[] = $repo_remise->find($results[$i]['id']);
}
//exit;
//print_r($tab_remise);
return $tab_remise;
}
//public function getRemiseCategorieClient(Article $article,$client = '',$montantTotal='',$prix='',$commande='',$articleCommande = '') {
public function getRemiseCategorieClient($articleCommande = '', $client = '', $montantTotal = '', $prix = '', $commande = '', $enregAuto = false)
{
$remise_valeurs = ["valeur" => "", "type" => "", "remiseEnEuros" => "0", "remiseId" => ""];
$remise_tampon = 0;
//exit;
//$repo_remise = $this->em->getRepository('DTCRemisesBundle:RemiseCategorieClient');
$repo_remise = $this->entityManager->getRepository(Remise::class);
if (is_object($articleCommande) && ! $enregAuto) {
//$remise_valeurs['test'] = "OK AC";
$remise = "";
if (is_object($articleCommande->getRemiseInitial())) {
//$remise = $articleCommande->getRemiseInitial();
$idR = $articleCommande->getRemiseInitial()->getId();
//$idR = 996;
$remise = $repo_remise->findOneBy(["id" => $idR]);
if (is_object($remise)) {
$liste_remise = [$remise];
} else {
$liste_remise = [];
}
} else {
$liste_remise = [];
}
} else {
//$remise_valeurs['test'] = "ERROR AC";
//$liste_remise = $repo_remise->getRemises($client);
//echo "PPPPPPPPPPPPPP";
$liste_remise = $this->getRemisesPossible($articleCommande, $client, $montantTotal, $prix, $commande);
}
if (is_array($liste_remise) || is_object($liste_remise)) {
foreach ($liste_remise as $remise) {
/** @var Remise $remise */
//echo "<div>".$remise->getId()." ".$remise->getMontant()." ".$remise->getTypeReduction()."</div>";
if (is_object($remise)) {
if ($remise->getTypeReduction() == "montant") {
if ($remise->getMontant() > $remise_tampon) {
$remise_valeurs['valeur'] = $remise->getMontant();
$remise_valeurs['type'] = "€";
$remise_valeurs['remiseEnEuros'] = $remise->getMontant();
$remise_valeurs['remiseId'] = $remise->getId();
$remise_tampon = $remise->getMontant();
}
} elseif ($remise->getTypeReduction() == "pourcentage") {
$remiseEnEuros = $prix * $remise->getMontant() / 100;
if ($remiseEnEuros > $remise_tampon) {
$remise_valeurs['valeur'] = $remise->getMontant();
$remise_valeurs['type'] = "%";
$remise_valeurs['remiseEnEuros'] = $remiseEnEuros;
$remise_valeurs['remiseId'] = $remise->getId();
$remise_tampon = $remiseEnEuros;
}
}
/*
echo "<div style='border:1px solid red;margin:15px;'>TEMP : ".$remise_tampon." ==> ".$remiseEnEuros." PRIX ".$prix."</div>";
print_r($remise_valeurs);
echo "<br/><br/>";
*/
}
}
}
/*
echo "<br/><br/>";
print_r($remise_valeurs);
exit;
*/
return $remise_valeurs;
}
/*
public function getStock(Article $article){
$result = null ;
$repoComposant = $this->em->getRepository("DTCArticlesBundle:ArticleComposant");
$nbrcompo = $repoComposant->findBy(array('articleCompose'=>$article->getId()));
foreach($nbrcompo as $composant){
if($composant->getArticle()->getVirtuel()){
$stock = getStock($article);
if($result == null and $composant->getArticle()->getNonStocke() == false and $composant->getArticle()->getNonCommandable() == false)$result = (int)$stock ;
if($stock < $result and $composant->getArticle()->getNonStocke() == false and $composant->getArticle()->getNonCommandable() == false )$result = (int)$stock ;
}else{
$stock = $composant->getArticle()->getStock()-$composant->getArticle()->getStockReserve();
$stock = $stock / $composant->getQuantite();
if($result === null and $composant->getArticle()->getNonStocke() == false and $composant->getArticle()->getNonCommandable() == false){
$result = (int)$stock ;
}
if($stock<$result and $composant->getArticle()->getNonStocke() == false and $composant->getArticle()->getNonCommandable() == false ){
$result = (int)$stock ;
}
}
}
if ($result == null)return 0;
return $result;
}
*/
public function getStock(Article $article, $avecStockReserve = true)
{
$results = [];
$repoComposant = $this->entityManager->getRepository(ArticleComposant::class);
$nbrcompo = $repoComposant->findBy(['articleCompose' => $article->getId()]);
foreach ($nbrcompo as $composant) {
if ($composant->getArticle()->getNonStocke() == false) {
if ($composant->getArticle()->getVirtuel()) {
$stock = $this->getStock($composant->getArticle(), $avecStockReserve);
} else {
$stock = $composant->getArticle()->getStock();
if ($avecStockReserve) {
$stock -= max(0, $composant->getArticle()->getStockReserve());
}
}
if ( ! empty($composant->getQuantite())) {
$stock = $stock / $composant->getQuantite();
}
$stock = floor($stock);
$stock = max(0, $stock);
$results[] = $stock;
}
}
if (count($results)) {
return min($results);
} else {
return 0;
}
}
public function getPrixAchatCompose(Article $article)
{
$prix = 0;
$results = [];
$repo_article = $this->entityManager->getRepository(Article::class);
$repoComposant = $this->entityManager->getRepository(ArticleComposant::class);
$nbrcompo = $repoComposant->findBy(['articleCompose' => $article->getId()]);
foreach ($nbrcompo as $composant) {
/*
if($composant->getArticle()->getVirtuel()){
$pump = $this->getPrixAchatCompose($composant->getArticle());
} else {
}
*/
$pump = $repo_article->getPumpR($composant->getArticle()->getId());
if ($pump == 0) {
$pump = $this->getPrixAchatNetEuro($composant->getArticle());
}
if ( ! empty($composant->getQuantite())) {
$pump = $pump * $composant->getQuantite();
}
$prix += $pump;
}
return $prix;
}
public function getEtatStock(Article $article, $quantite, Commande $commande = null)
{
if ($commande === null) {
$quantiteSurLaCommande = 0;
} else {
$quantiteSurLaCommande = $this->getQuantiteArticleSurCommande($article, $commande);
}
if ($article->getNonStocke() or $article->getNonCommandable()) {
return "1";
}
$couleur = "";
$debug = "";
$stock_disponible = floatval($article->getStock()) - floatval($article->getStockReserve());
$stock_avec_saisie = $stock_disponible + $quantiteSurLaCommande - floatval($quantite);
if ($article->getVirtuel()) {
$donnees = [];
foreach ($article->getArticlesComposants() as $composant) {
$articleTmp = $composant->getArticle();
$quantiteTmp = $composant->getQuantite() * $quantite;
$result = $this->getCouleurEtatStock($articleTmp, $quantiteTmp);
$donnees[$result] = $result;
$debug .= " test_".$result;
}
if (array_key_exists("cmde_pduit_possible_stock_mini", $donnees)) {
$couleur = "1";
}
if (array_key_exists("cmde_pduit_possible_reappro", $donnees)) {
$couleur = "1";
}
if (array_key_exists("cmde_pduit_impossible", $donnees)) {
$couleur = "0";
}
//$couleur .= $debug;
} elseif (floatval($article->getStock()) <= 0) {
$couleur = "0";
} elseif ($stock_avec_saisie < 0) {
$couleur = "1";
} else {
if ($stock_avec_saisie < $article->getSeuilCritique()) {
$couleur = "1";
}
}
if ($couleur == "") {
$couleur = "1";
}
return $couleur;
}
public function totalementPrepare($articleCommande)
{
$repoArticleCommande = $this->entityManager->getRepository(ArticleCommande::class);
if ( ! is_object($articleCommande)) {
return false;
}
if ($articleCommande->getRalClient() == 0) {
return true;
}
$total = $repoArticleCommande->resteApreparer($articleCommande);
if ($total == 0) {
return true;
}
return false;
}
public function qteDejaPreparee($articleCommande, $visualisation = false)
{
$repoArticleCommande = $this->entityManager->getRepository(ArticleCommande::class);
if ( ! is_object($articleCommande)) {
return 0;
}
if ($visualisation == true && is_object($articleCommande->getCommande()) && is_object($articleCommande->getCommande()->getTypeDocumentCommercial())) {
$typeDoc = $articleCommande->getCommande()->getTypeDocumentCommercial();
if ($typeDoc == 4 or $typeDoc == 11) {
return $articleCommande->getQuantite();
}
}
if ($articleCommande->getRalClient() == 0) {
return $articleCommande->getQuantite();
}
$total = $repoArticleCommande->getQuantitePreparee($articleCommande);
return $total;
}
public function qtePrepareeOuLivreeOuFacturee($articleCommande)
{
$repoArticleCommande = $this->entityManager->getRepository(ArticleCommande::class);
if ( ! is_object($articleCommande)) {
return 0;
}
if ($articleCommande->getRalClient() == 0 && $articleCommande->getQuantite() > 0) {
return $articleCommande->getQuantite();
}
$total = $repoArticleCommande->qtePrepareeOuLivreeOuFacturee($articleCommande);
return $total;
}
public function qteDejaLivree($articleCommande)
{
$repoArticleCommande = $this->entityManager->getRepository(ArticleCommande::class);
if ( ! is_object($articleCommande)) {
return 0;
}
if ($articleCommande->getRalClient() == 0 && $articleCommande->getQuantite() > 0) {
return $articleCommande->getQuantite();
}
$total = $repoArticleCommande->getQuantiteLivree($articleCommande);
return $total;
}
public function qteDejaLivree2($articleCommande)
{
$articleCommande = $this->getArticleCommandeCommande($articleCommande);
if (is_object($articleCommande)) {
$ralClient = $articleCommande->getRalClient();
$quantite = $articleCommande->getQuantite();
if ($quantite < 0) {
$ralClient = min(0, $ralClient);
} else {
$ralClient = max(0, $ralClient);
}
$qteDejaLivree = $quantite - $ralClient;
return $qteDejaLivree;
} else {
return 0;
}
}
private function getArticleCommandeCommande($articleCommande, $count = 5)
{
while (is_object($articleCommande)) {
$count--;
if ($count < 0) {
break;
}
$commande = $articleCommande->getCommande();
if (is_object($commande) && is_int($commande->getTypeDocumentCommercial()) && $commande->getTypeDocumentCommercial() == TypeDocumentCommercial::COMMANDE) {
return $articleCommande;
} else {
$articleCommande = $articleCommande->getArticleCommandeParent();
}
}
return $articleCommande;
}
public function resteApreparer($articleCommande)
{
$repoArticleCommande = $this->entityManager->getRepository(ArticleCommande::class);
if ( ! is_object($articleCommande)) {
return $articleCommande['quantite'];
}
if ($articleCommande->getRalClient() == 0) {
return 0;
}
$total = $repoArticleCommande->resteApreparer($articleCommande);
return $total;
}
public function getCouleurEtatStock(Article $article, $quantite, Commande $commande = null)
{
if ($commande === null) {
$quantiteSurLaCommande = 0;
} else {
$quantiteSurLaCommande = $this->getQuantiteArticleSurCommande($article, $commande);
}
$couleur = "success";
if ($article->getNonStocke() or $article->getNonCommandable()) {
return $couleur;
}
$debug = "";
$stock_disponible = floatval($article->getStock()) - floatval($article->getStockReserve());
$stock_disponible += $this->getRalFournisseur($article, true);
//$stock_disponible_avant_commande = floatval($article->getStock()) - floatval($article->getStockReserve());
//$stock_disponible = $stock_disponible - floatval($quantite);
$stock_avec_saisie = $stock_disponible + $quantiteSurLaCommande - floatval($quantite);
if ($article->getVirtuel()) {
$donnees = [];
foreach ($article->getArticlesComposants() as $composant) {
$articleTmp = $composant->getArticle();
$quantiteTmp = $composant->getQuantite() * $quantite;
$result = $this->getCouleurEtatStock($articleTmp, $quantiteTmp);
$donnees[$result] = $result;
$debug .= " test_".$result;
}
if (array_key_exists("cmde_pduit_possible_stock_mini", $donnees)) {
$couleur = "cmde_pduit_possible_stock_mini";
}
if (array_key_exists("cmde_pduit_possible_reappro", $donnees)) {
$couleur = "cmde_pduit_possible_reappro";
}
if (array_key_exists("cmde_pduit_impossible", $donnees)) {
$couleur = "cmde_pduit_impossible";
}
$couleur .= $debug;
} /*
elseif($stock_disponible_avant_commande == 0) $couleur = "cmde_pduit_possible_reappro";
else if($stock_disponible < 0) $couleur = "cmde_pduit_impossible";
else if($stock_disponible_avant_commande < $quantite ) $couleur = "cmde_pduit_possible_reappro";
else {
$nouveauStock = $stock_disponible_avant_commande - $quantite;
//echo $nouveauStock." ".$article->getSeuilMiniCommandeFournisseur();
if($nouveauStock < $article->getSeuilMiniCommandeFournisseur()) $couleur = "cmde_pduit_possible_stock_mini";
}
*
*/
elseif (floatval($article->getStock()) <= 0) {
$couleur = "cmde_pduit_impossible";
} //elseif ($stock_disponible <= 0) $couleur = "cmde_pduit_impossible";
elseif ($stock_avec_saisie < 0) {
$couleur = "cmde_pduit_possible_reappro";
} else {
//if($stock_avec_saisie < $article->getSeuilMiniCommandeFournisseur()) $couleur = "cmde_pduit_possible_stock_mini";
if ($stock_avec_saisie < $article->getSeuilCritique()) {
//echo "OKOKA ".$stock_avec_saisie." ".$article->getSeuilCritique();
//$couleur = "cmde_pduit_possible_stock_mini";
$couleur = "cmde_pduit_possible_stock_critique";
}
}
//echo $couleur;
//Article
return $couleur;
}
public function getQuantiteArticleSurCommande(Article $article, Commande $commande)
{
$repo = $this->entityManager->getRepository(ArticleCommande::class);
$retour = $repo->getQuantiteArticleSurCommande($article, $commande);
return $retour;
}
public function getCouleurQteF2($articleCommande)
{
$couleur = "";
if ($articleCommande->getQuantite() < $articleCommande->getConditionAchat()->getQuantite()) {
$couleur = 'warning';
}
$retour = $this->getQteConseillee($articleCommande->getArticle(), $articleCommande->getConditionAchat());
if ($articleCommande->getQuantite() < $retour['qteMini']) {
$couleur = 'danger';
}
return $couleur;
}
public function getCouleurQteF(Article $article, $quantite, $fournisseur = null)
{
$couleur = "";
$retour = $this->getQteConseillee($article);
/*
if ($article->getSeuilMaxiCommandeFournisseur() != '' && $retour['qteMaxi'] != '' && ($quantite > $article->getSeuilMaxiCommandeFournisseur() || $quantite > $retour['qteMaxi']))
$couleur = 'warning';
*
*/
//Conditions Achat
if ($fournisseur != null) {
$repoConditionsAchat = $this->entityManager->getRepository(ConditionAchat::class);
$conditions = $repoConditionsAchat->findBy(['article' => $article->getId(), 'fournisseur' => $fournisseur]);
} else {
$conditions = $article->getConditionsAchat();
}
foreach ($conditions as $condition) {
if ($quantite < $condition->getQuantite()) {
$couleur = 'warning';
}
/*
if($condition->getConditionnement() > 1){
$modulo = $quantite % $condition->getConditionnement();
if ($quantite > $condition->getQuantite() && $modulo != 0){
$couleur = 'danger';
return $couleur;
}
}
*
*/
}
if ($quantite < $retour['qteMini']) {
$couleur = 'danger';
}
//if ($quantite < $article->getSeuilMiniCommandeFournisseur() || $quantite < $retour['qteMini'])
//$couleur = 'couleur'.$retour['qteMini'];
return $couleur;
}
public function sauvegarder($article, $categories)
{
$repo_categorie = $this->entityManager->getRepository(Categorie::class);
$repo_article_categorie = $this->entityManager->getRepository(ArticleCategorie::class);
$articleCategorie = $article->getArticleCategorie();
foreach ($articleCategorie as $ac) {
if ( ! in_array($ac->getCategorie()->getId(), $categories)) {
$this->entityManager->remove($ac);
}
}
for ($i = 0; $i < count($categories); $i++) {
$c = $repo_categorie->find($categories[$i]);
if (is_object($c)) {
$relation = $repo_article_categorie->findOneBy(['article' => $article, 'categorie' => $c]);
if ( ! is_object($relation)) {
$objet = new ArticleCategorie();
$objet->setCategorie($c);
$objet->setArticle($article);
$this->entityManager->persist($objet);
}
}
}
$this->entityManager->flush();
}
public function setFournisseurDefaut(Article $article)
{
$fournisseur = '';
/*
$conditionsAchat = $article->getConditionsAchat();
//Le fournisseur de la condition d'achat par defaut
foreach($conditionsAchat as $conditionAchat)
{
if ($conditionAchat->getDefaut() == true)
$fournisseur = $conditionAchat->getFournisseur();
}
*/
$qteConseillee = $this->getQteConseillee($article);
if ( ! empty($qteConseillee['condition']) && is_object($qteConseillee['condition'])) {
$fournisseur = $qteConseillee['condition']->getFournisseur();
}
//Le fournisseur de la premiere condition d'achat ayant un fournisseur
if ( ! is_object($fournisseur) && isset($conditionAchat)) {
foreach ($conditionsAchat as $conditionAchat) {
if ( ! is_object($fournisseur)) {
$fournisseur = $conditionAchat->getFournisseur();
}
}
}
//Le fournisseur du dernier achat.
if ( ! is_object($fournisseur)) {
$mvtStock = $this->entityManager->getRepository(MouvementStock::class)->findOneBy(
[
'article' => $article->getId(),
'raisonMouvementStock' => 3,
]
, ['date' => 'DESC']
);
if (is_object($mvtStock)) {
$fournisseur = $mvtStock->getFournisseur();
}
}
if (is_object($fournisseur)) {
$article->setFournisseurDefaut($fournisseur);
$this->entityManager->persist($article);
$this->entityManager->flush();
}
}
//}
public function getQteConseillee($article, ConditionAchat $condition = null, Fournisseur $fournisseur = null)
{
$qteConseillee = 1;
$qteMini = 1;
$qteMaxi = false;
//$qteMini = abs($article->getStock()-$article->getStockReserve()+$article->getRalFournisseur());
$stockVirtuel = $article->getStock() - $article->getStockReserve() + $article->getRalFournisseur();
if ($stockVirtuel < 0) {
$qteMini = abs($stockVirtuel);
}
if ($article->getSeuilMiniCommandeFournisseur() >= 0) {
$qteMini = $article->getSeuilMiniCommandeFournisseur() - $stockVirtuel;
}
if ($article->getSeuilMaxiCommandeFournisseur() > 0) {
$qteMaxi = true;
//$qteConseillee = $article->getSeuilMaxiCommandeFournisseur()+$qteMini;
$qteConseillee = $article->getSeuilMaxiCommandeFournisseur() - $stockVirtuel;
} elseif ($article->getSeuilMiniCommandeFournisseur() >= 0) {
//$qteConseillee = $article->getSeuilMiniCommandeFournisseur()+$qteMini;
$qteConseillee = $article->getSeuilMiniCommandeFournisseur() - $stockVirtuel;
} elseif ($stockVirtuel < 0) {
$qteConseillee = abs($stockVirtuel);
}
if ($qteConseillee < 0) {
$qteConseillee = 1;
}
if ($qteMini < 0) {
$qteMini = 1;
}
if ( ! is_object($condition)) {
$variables = [
'article' => $article->getId(),
'defaut' => true,
];
if (is_object($fournisseur)) {
$variables['fournisseur'] = $fournisseur;
}
$condition = $this->entityManager->getRepository(ConditionAchat::class)->findOneBy($variables);
}
if ( ! is_object($condition)) {
$variables = [
'article' => $article->getId(),
];
if (is_object($fournisseur)) {
$variables['fournisseur'] = $fournisseur;
}
$conditions = $this->entityManager->getRepository(ConditionAchat::class)->findBy(
$variables,
['prixAchatNet' => 'ASC'],
1,
0
);
if (count($conditions)) {
$condition = $conditions[0];
}
}
if (is_object($condition)) {
$quantiteMini = $condition->getQuantite();
$qteMini = max($quantiteMini, $qteMini);
$qteConseillee = ceil(max($quantiteMini, $qteConseillee));
$conditionnement = $condition->getConditionnement();
if ($conditionnement != 0) {
if ($qteConseillee < $conditionnement) {
$qteConseillee = $conditionnement;
} elseif ($qteConseillee % $conditionnement != 0) {
$qteConseillee = ceil($qteConseillee / $conditionnement) * $conditionnement;
}
}
$retour['condition'] = $condition;
}
$retour['qteConseillee'] = $qteConseillee;
$retour['qteMini'] = $qteMini;
$retour['qteMaxi'] = $qteMaxi;
//print_r($retour);
return $retour;
}
public function majQteConseillee($article, ConditionAchat $condition = null)
{
//quantite_conseillee_mini quantite_conseillee quantite_conseillee_maxi
$tableau_donnee = [];
$retour = $this->getQteConseillee($article, $condition);
if ($article->getQuantiteConseillee() != $retour['qteConseillee']) {
//$article->setQuantiteConseillee($retour['qteConseillee']);
$tableau_donnee["quantite_conseillee"] = $retour['qteConseillee'];
}
if ($article->getQuantiteConseilleeMini() != $retour['qteMini']) {
//$article->setQuantiteConseilleeMini($retour['qteMini']);
$tableau_donnee["quantite_conseillee_mini"] = $retour['qteMini'];
}
if ( ! in_array($retour['qteMaxi'], [true, false]) && $article->getQuantiteConseilleeMaxi() != $retour['qteMaxi']) {
//$article->setQuantiteConseilleeMaxi($retour['qteMaxi']);
$tableau_donnee["quantite_conseillee_maxi"] = $retour['qteMaxi'];
}
if ( ! empty($retour['condition']) && is_object($retour['condition']) && is_object($retour['condition']->getFournisseur())) {
$tableau_donnee["fournisseur_defaut_id"] = $retour['condition']->getFournisseur()->getId();
$tableau_donnee["condition_achat_defaut_id"] = $retour['condition']->getId();
}
if (count($tableau_donnee) > 0) {
$conn = $this->entityManager->getConnection();
$conn->update('article__article', $tableau_donnee, ['id' => $article->getId()]);
}
//$this->em->persist($article);
//$this->em->flush();
}
public function ___majQteConseillee($article, ConditionAchat $condition = null)
{
/*
$qteConseillee = 1;
$qteMini = 1;
//$qteMini = abs($article->getStock()-$article->getStockReserve()+$article->getRalFournisseur());
$stockVirtuel = $article->getStock()-$article->getStockReserve()+$article->getRalFournisseur();
if($stockVirtuel < 0) $qteMini = abs($stockVirtuel);
if($article->getSeuilMaxiCommandeFournisseur() > 0) {
$qteMaxi = true;
//$qteConseillee = $article->getSeuilMaxiCommandeFournisseur()+$qteMini;
$qteConseillee = $article->getSeuilMaxiCommandeFournisseur()-$stockVirtuel;
} else if($article->getSeuilMiniCommandeFournisseur() >= 0){
//$qteConseillee = $article->getSeuilMiniCommandeFournisseur()+$qteMini;
$qteConseillee = $article->getSeuilMiniCommandeFournisseur()-$stockVirtuel;
$qteMaxi = false;
} else if($stockVirtuel < 0) {
$qteConseillee = abs($stockVirtuel);
}
if($qteConseillee < 0) $qteConseillee = 0;
if (is_object($condition)){
$quantiteMini = $condition->getQuantite();
$quantiteConditionnement = $condition->getConditionnement();
$quantiteR = max($quantiteMini, $qteConseillee);
$qteConseillee = ceil($quantiteR/$quantiteConditionnement)*$quantiteConditionnement;
$qteMini = max($quantiteMini, $quantiteConditionnement, $qteMini);
}
*
*/
$retour = $this->getQteConseillee($article, $condition);
if ($article->getQuantiteConseillee() != $retour['qteConseillee']) {
$article->setQuantiteConseillee($retour['qteConseillee']);
}
if ($article->getQuantiteConseilleeMini() != $retour['qteMini']) {
$article->setQuantiteConseilleeMini($retour['qteMini']);
}
if ($article->getQuantiteConseilleeMaxi() != $retour['qteMaxi']) {
$article->setQuantiteConseilleeMaxi($retour['qteMaxi']);
}
$this->entityManager->persist($article);
$this->entityManager->flush();
}
public function _majQteConseillee($article, ConditionAchat $condition = null)
{
$qteConseillee = 0;
$qteMini = abs($article->getStock() - $article->getStockReserve() + $article->getRalFournisseur());
if ($article->getSeuilMaxiCommandeFournisseur() > 0) {
$qteMaxi = true;
$qteConseillee = $article->getSeuilMaxiCommandeFournisseur() + $qteMini;
} elseif ($article->getSeuilMiniCommandeFournisseur() >= 0) {
$qteConseillee = $article->getSeuilMiniCommandeFournisseur() + $qteMini;
$qteMaxi = false;
} else {
$qteConseillee = $qteMini;
}
if (is_object($condition)) {
$quantiteMini = $condition->getQuantite();
$quantiteConditionnement = $condition->getConditionnement();
$quantiteR = max($quantiteMini, $qteConseillee);
$qteConseillee = ceil($quantiteR / $quantiteConditionnement) * $quantiteConditionnement;
$qteMini = max($quantiteMini, $quantiteConditionnement, $qteMini);
}
$article->setQuantiteConseillee($qteConseillee);
$article->setQuantiteConseilleeMini($qteMini);
$article->setQuantiteConseilleeMaxi($qteMaxi);
$this->entityManager->persist($article);
$this->entityManager->flush();
}
public function majQteConseilleeApresImport()
{
$repoArticle = $this->entityManager->getRepository(Article::class);
$repoArticle->updateACommander();
$articlesAmaj = $repoArticle->findByACommander(true);
foreach ($articlesAmaj as $article) {
$this->majQteConseillee($article);
}
}
public function getArticlesComposantsAvecArborescence(Article $article, $retour, $quantite = 1)
{
$articlesComposants = $article->getArticlesComposants();
$quantiteComposant = $article->getStockReserve();
foreach ($articlesComposants as $articleComposant) {
$quantiteComposant = $articleComposant->getQuantite() * $quantite;
$ssArticle = $articleComposant->getArticle();
if (count($ssArticle->getArticlesComposants()) > 0) {
$retour2 = "";
$retour2 = $this->getArticlesComposantsAvecArborescence($ssArticle, $retour2, $quantiteComposant);
$retour[$ssArticle->getId()] = [$articleComposant, $retour2];
} else {
$articleComposant->setQuantite($quantiteComposant);
$retour[$ssArticle->getId()] = $articleComposant;
}
}
return $retour;
}
public function majClientsEnRal(Article $article)
{
//Supprimer tous les liasons clients
/*foreach($article->getClientsEnRal() as $client){
$article->removeClientsEnRal($client);
}*/
$conn = $this->entityManager->getConnection();
$sql = "DELETE FROM `article_client` WHERE article_id = ".$article->getId()."";
$stmt = $conn->prepare($sql);
$stmt->execute();
//echo "<div>sql : ".$sql."</div>";
//exit;
$repoArticle = $this->entityManager->getRepository(Article::class);
$clients = $repoArticle->getClientsEnRal($article);
//Ajouter les clients
$repoClient = $this->entityManager->getRepository(Client::class);
foreach ($clients as $client) {
//echo "<div>client : ".$client['id']."</div>";
//$client = $repoClient->find($client['id']);
//$article->addClientsEnRal($client);
$tableau_donnee = [];
$tableau_donnee["client_id"] = $client['id'];
$tableau_donnee["article_id"] = $article->getId();
$conn->insert('article_client', $tableau_donnee);
}
//$this->em->persist($article);
//$this->em->flush();
//exit;
}
public function ____majClientsEnRal(Article $article)
{
//Supprimer tous les liasons clients
foreach ($article->getClientsEnRal() as $client) {
$article->removeClientsEnRal($client);
}
$repoArticle = $this->entityManager->getRepository(Article::class);
$clients = $repoArticle->getClientsEnRal($article);
//Ajouter les clients
$repoClient = $this->entityManager->getRepository(Client::class);
foreach ($clients as $client) {
$client = $repoClient->find($client['id']);
$article->addClientsEnRal($client);
}
$this->entityManager->persist($article);
$this->entityManager->flush();
}
public function modifierStockComposants(Article $compose, ArticleCommande $ac, $variation, $raisonMvtStock = 1, Commande $commande = null)
{
$composants = $compose->getArticlesComposants();
$repo_raison_mvt_stck = $this->entityManager->getRepository(RaisonMouvementStock::class);
$repo_emplacement = $this->entityManager->getRepository(Emplacement::class);
if ( ! is_object($commande)) {
$commande = $ac->getCommande();
}
foreach ($composants as $articleComposant) {
$article = $articleComposant->getArticle();
//echo "<div>COMPOSANT : ".$article->getId()." VAR(".$variation.") QTE (".floatval($articleComposant->getQuantite()).")</div>";
$test = "<div>COMPOSANT : ".$article->getId()." VAR(".$variation.") QTE (".floatval($articleComposant->getQuantite()).")</div>";
$quantiteTmp = $variation * floatval($articleComposant->getQuantite());
if ($article->getVirtuel() == true && $article->getProduitInterne() == true) {
//echo "<div>COMPOSANT COMPOSE: ".$article->getId()."</div>";
$this->modifierStockComposants($article, $ac, $quantiteTmp, $raisonMvtStock, $commande);
} else {
//Creer un mouvement de stock
$mvtStock = new MouvementStock;
$mvtStock->setArticle($article);
$mvtStock->setArticleCommandeVirtuel($ac);
if (is_object($commande)) {
$mvtStock->setCommandeVirtuel($commande);
}
$mvtStock->setQuantite($quantiteTmp);
if ($raisonMvtStock != '') {
$raisonMouvementStock = $repo_raison_mvt_stck->find($raisonMvtStock);
if (is_object($raisonMouvementStock)) {
$mvtStock->setRaisonMouvementStock($raisonMouvementStock);
}
if (is_object($raisonMouvementStock) and ($raisonMouvementStock->getId() == 11 or $raisonMouvementStock->getId() == 12)) {
$quantiteTmp = "-".$quantiteTmp;
$quantiteTmp = str_replace("--", "", $quantiteTmp);
$mvtStock->setQuantite($quantiteTmp);
}
}
$mvtStock->setCommande($ac->getCommande());
$mvtStock->setEstUnComposant(true);
//$mvtStock->setCommentaire("modifierStockComposants ".$test);
/*
$nbEmplacement = count($article->getEmplacements());
//echo "<div>NB E ".$nbEmplacement."</div>";
if($nbEmplacement > 0) {
$compteur = 0;
foreach($article->getEmplacements() as $e) {
//echo "<div>".$e->getLibelle()." cpt : ".$compteur."</div>";
if($compteur == 0) {
$mvtStock->setEmplacement($e);
}
$compteur++;
}
}
*
*/
//emplacement par défaut
$emplacementPardefaut = $repo_emplacement->findOneBy(['article' => $article->getId(), 'defaut' => true, 'visibilite' => true]);
if ( ! is_object($emplacementPardefaut)) {
$emplacementPardefaut = $repo_emplacement->findOneBy(['article' => $article->getId(), 'visibilite' => true]);
}
if (is_object($emplacementPardefaut)) {
$mvtStock->setEmplacement($emplacementPardefaut);
}
$this->entityManager->persist($ac);
$this->entityManager->persist($mvtStock);
$this->mouvementStockService->sauvegarder($mvtStock, $article);
/*
$stock = floatval($articleComposant->getArticle()->getStock())+$quantiteTmp;
$articleComposant->setStock($stock);
$this->em->persist($articleComposant);
*
*/
}
}
$this->entityManager->flush();
}
//if($article->getVirtuel() == true or $article->getNonStocke() == true or $article->getNonCommandable() == true or $article->getMainOeuvre() == true){
public function modifierStockReserveComposants(Article $compose, $variation)
{
$repo_emplacement = $this->entityManager->getRepository(Emplacement::class);
$composants = $compose->getArticlesComposants();
foreach ($composants as $articleComposant) {
$quantiteTmp = $variation * floatval($articleComposant->getQuantite());
$article = $articleComposant->getArticle();
//echo "<div>ART ".$article->getReference()."</div>";
if ($articleComposant->getArticle()->getVirtuel() == true && $articleComposant->getArticle()->getProduitInterne() == true) {
$this->modifierStockReserveComposants($article, $quantiteTmp);
} else {
if ($article->getVirtuel() == true or $article->getNonStocke() == true or $article->getNonCommandable() == true or $article->getMainOeuvre() == true) {
} else {
$stockReserve = floatval($article->getStockReserve()) + $quantiteTmp;
$stockReserve = max(0, $stockReserve);
if (1 != 1 and $article->getReference() == "SSSEKR115") {
//echo "<div>SR ".$article->getStockReserve()."</div>";
//echo "<div>ARTICLE ".$article->getReference()."</div>";
//echo "<div>variation ".$variation."</div>";
//echo "<div>quantiteTmp ".$quantiteTmp."</div>";
//echo "<div>stockReserve ".$stockReserve."</div>";
//echo "<div>quantiteTmp ".$quantiteTmp."</div>";
//echo "<div><br/><br/></div>";
}
if ($quantiteTmp != 0) {
$article->setStockReserve($stockReserve);
$this->ebayService->publierAnnonce($article->getId());
/*
$nbEmplacement = count($article->getEmplacements());
//echo "<div>NB E ".$nbEmplacement."</div>";
if($nbEmplacement > 0) {
$compteur = 0;
foreach($article->getEmplacements() as $e) {
//echo "<div>".$e->getLibelle()." cpt : ".$compteur."</div>";
if($compteur == 0) {
$e->setStockReserve(floatval($e->getStockReserve())+floatval($quantiteTmp));
$this->em->persist($e);
}
$compteur++;
}
}
*/
//emplacement par défaut
$emplacementPardefaut = $repo_emplacement->findOneBy(['article' => $article->getId(), 'defaut' => true, 'visibilite' => true]);
if ( ! is_object($emplacementPardefaut)) {
$emplacementPardefaut = $repo_emplacement->findOneBy(['article' => $article->getId(), 'visibilite' => true]);
}
if (is_object($emplacementPardefaut)) {
$stockReserveEmplacement = floatval($emplacementPardefaut->getStockReserve()) + floatval($quantiteTmp);
$stockReserveEmplacement = max(0, $stockReserveEmplacement);
$emplacementPardefaut->setStockReserve($stockReserveEmplacement);
$this->entityManager->persist($emplacementPardefaut);
}
}
if (1 != 1 and $article->getReference() == "SSSEKR115") {
//echo "<div>ARTICLE SR ".$article->getStockReserve()."</div>";
//echo "<div><br/><br/></div>";
}
$this->entityManager->persist($article);
$this->entityManager->flush();
}
}
}
//$this->em->flush();
//exit;
}
public function majConditionAchatImport(Article $article, $prix = null)
{
$repo_condition_achat = $this->entityManager->getRepository(ConditionAchat::class);
$conditionAchat = $repo_condition_achat->findOneBy(['article' => $article, 'defaut' => true]);
if (is_object($conditionAchat)) {
if ($prix === null) {
$prix = $article->getPrixBase();
$prixArticle = $article->getPrixBase();
} else {
$prix = str_replace(",", ".", $prix);
$prixArticle = $prix;
}
$tauxChange = 1;
$fournisseur = $conditionAchat->getFournisseur();
if (is_object($fournisseur)) {
$devise = $fournisseur->getDevise();
}
if (is_object($devise) && $devise->getTauxChange() != 0) {
$tauxChange = $devise->getTauxChange();
}
$prix = $prix / $tauxChange; //prix de base converti en devise
$conditionAchat->setPrixAchatBrut($prix);
$prixAchatNet = $prix * (1 - ($conditionAchat->getTauxRemise() / 100)) * (1 - ($conditionAchat->getTauxRemiseSupplementaire() / 100));
$coefficient = $conditionAchat->getCoefficient();
if ($coefficient != 0) {
$prixAchatNet = $prixAchatNet * $coefficient;
}
$prixAchatNet += $conditionAchat->getFraisAnnexes();
$conditionAchat->setPrixAchatNet($prixAchatNet);
$this->entityManager->persist($conditionAchat);
if ($article->getMajPrix() == 1) {
$article->setPrixBase($prixArticle * $tauxChange);
$prixVente = floatval($article->getPrixVente());
//$prixVente = $article->getCoefficientPrixBaseVente()*$prixArticle;
//$article->setPrixVente($prixVente);
$margeReelle = $prixVente - $article->getCpump();
$article->setMargeReelle($margeReelle);
$this->entityManager->persist($article);
}
$this->entityManager->flush();
}
}
public function majEnFonctionDuPrixAchat(Article $article, $prix = null)
{
//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
if ($article->getMajPrix() == 1) {
$repo_condition_achat = $this->entityManager->getRepository(ConditionAchat::class);
//$conditionAchat = $repo_condition_achat->findOneBy(array('article'=>$article, 'defaut'=>true));
$conditionAchat = '';
$qteConseillee = $this->getQteConseillee($article);
if ( ! empty($qteConseillee['condition'])) {
$conditionAchat = $qteConseillee['condition'];
}
if (is_object($conditionAchat)) {
if ($prix === null) {
$prix = $conditionAchat->getPrixAchatBrut();
}
if ($conditionAchat->getCoefficientConditionnement() != 0) {
$prix = $prix / $conditionAchat->getCoefficientConditionnement();
}
$tauxChange = 1;
$fournisseur = $conditionAchat->getFournisseur();
if (is_object($fournisseur)) {
$devise = $fournisseur->getDevise();
}
if (is_object($devise) && $devise->getTauxChange() != 0) {
$tauxChange = $devise->getTauxChange();
}
$prix = $prix * $tauxChange; //prix d'achat brut converti en euros
//
}
$prix = round($prix, 2);
$article->setPrixBase($prix);
} else {
$prix = $article->getPrixBase();
}
if (floatval($article->getCoefficientPrixBaseVente()) == 0) {
$article->setCoefficientPrixBaseVente(1);
$prixVente = $prix;
} else {
//$prixVente = floatval($article->getCoefficientPrixBaseVente()) * $prix;
$prixVente = $article->getPrixVente();
$coefficientPrixBaseVente = 1;
if ($prix != 0) {
$coefficientPrixBaseVente = $prixVente / $prix;
}
$article->setCoefficientPrixBaseVente($coefficientPrixBaseVente);
}
//$article->setPrixVente($prixVente);
//$marge = $prixVente - $prix;
//recupérer la condition d'achat par défaut
/*
$repo_condition_achat = $this->em->getRepository(ConditionAchat::class);
$conditionAchat = $repo_condition_achat->findOneBy(array('article'=>$article, 'defaut'=>true));
if(is_object($conditionAchat)){
$prixNetAchat = $conditionAchat->getPrixAchatNet();
$marge = $prixVente - $prixNetAchat;
$article->setMarge($marge);
$tauxMarge = $marge / $prixVente * 100;
$article->setTauxMarge($tauxMarge);
}
*
*/
$margeReelle = $prixVente - $article->getCpump();
$article->setMargeReelle($margeReelle);
$this->entityManager->persist($article);
if ($article->getMajPrix() == 1) {
$message_historique = [];
$message_historique["titre"] = "Mise à jour du prix suite modification condition d'achat par défaut";
$message_historique["message"] = "";
$this->creerHistorique($article, 'defaut', $message_historique);
}
$this->entityManager->flush();
}
public function majCondHaEnFonctionPrixBasePourImport(Article $article)
{
//return "RRRRRR";
$repo_fournisseur = $this->entityManager->getRepository(Fournisseur::class);
$conn = $this->entityManager->getConnection();
if ($article->getMajPrix() == 1) {
/*
$sql = "SELECT * FROM article__condition_achat WHERE article_id = :article_id and statut = :statut LIMIT 0,1";
$stmt = $conn->prepare($sql);
$stmt->bindValue('article_id',$article->getid());
$stmt->bindValue('statut',"1");
$stmt->execute();
$existe = $stmt->fetchAllAssociative();
*/
$repo_condition_achat = $this->entityManager->getRepository(ConditionAchat::class);
$conditionAchat = $repo_condition_achat->findOneBy(['article' => $article, 'defaut' => true]);
if (is_object($conditionAchat)) {
$prix = $article->getPrixBase();
$tauxChange = 1;
$fournisseur = $conditionAchat->getFournisseur();
//$fournisseur = $repo_fournisseur->find($existe["0"]["fournisseur_id"]);
if (is_object($fournisseur)) {
$devise = $fournisseur->getDevise();
}
if (is_object($devise) && $devise->getTauxChange() != 0) {
$tauxChange = $devise->getTauxChange();
}
$prix = $prix / $tauxChange; //prix de base converti en devise
$conditionAchat->setPrixAchatBrut($prix);
$prixAchatNet = $prix * (1 - ($conditionAchat->getTauxRemise() / 100)) * (1 - ($conditionAchat->getTauxRemiseSupplementaire() / 100));
$coefficient = $conditionAchat->getCoefficient();
if ($coefficient != 0) {
$prixAchatNet = $prixAchatNet * $coefficient;
}
$prixAchatNet += $conditionAchat->getFraisAnnexes();
$conditionAchat->setPrixAchatNet($prixAchatNet);
//$this->em->persist($conditionAchat);
//$this->em->flush();
$sql = "UPDATE article__condition_achat SET prix_achat_brut='".$prix."' , prix_achat_net='".$prixAchatNet."' WHERE id=".$conditionAchat->getId()." ";
//echo $sql;
$stmt = $conn->executeQuery($sql);
}
//print_r($existe);
//exit;
}
//echo "OUOIUIUIIIO";
return true;
}
public function majCondHaEnFonctionPrixBase(Article $article)
{
if ($article->getMajPrix() == 1) {
$repo_condition_achat = $this->entityManager->getRepository(ConditionAchat::class);
$conditionAchat = $repo_condition_achat->findOneBy(['article' => $article, 'defaut' => true]);
if (is_object($conditionAchat)) {
$prix = $article->getPrixBase();
$cc = floatval($conditionAchat->getCoefficientConditionnement());
if ($cc != 0) {
$prix = $prix * $cc;
}
$tauxChange = 1;
$fournisseur = $conditionAchat->getFournisseur();
if (is_object($fournisseur)) {
$devise = $fournisseur->getDevise();
if (is_object($devise) && $devise->getTauxChange() != 0) {
$tauxChange = $devise->getTauxChange();
}
$prix = $prix / $tauxChange; //prix de base converti en devise
}
$conditionAchat->setPrixAchatBrut($prix);
$prixAchatNet = $prix * (1 - ($conditionAchat->getTauxRemise() / 100)) * (1 - ($conditionAchat->getTauxRemiseSupplementaire() / 100));
$coefficient = $conditionAchat->getCoefficient();
if ($coefficient != 0) {
$prixAchatNet = $prixAchatNet * $coefficient;
}
$prixAchatNet += $conditionAchat->getFraisAnnexes();
$conditionAchat->setPrixAchatNet($prixAchatNet);
$this->entityManager->persist($conditionAchat);
$this->entityManager->flush();
}
}
}
public function ralClient($articleId)
{
//$ralClient = $this->em->getRepository(ArticleCommande::class)->getRalClient($articleId);return $ralClient;
//return 2;
$article = $this->entityManager->getRepository(Article::class)->find($articleId);
$ralClient = 0;
$composants = $this->entityManager->getRepository(ArticleComposant::class)->getComposantsComposeVirtuel($article)->getQuery()->getResult();
$reservations = $this->entityManager->getRepository(ArticleCommande::class)->getRalClientEtCmdAssociees($article, $composants);
foreach ($reservations as $reservation) {
foreach ($reservation as $res) {
//print_r($res);
if (array_key_exists('ral_quantite', $res)) {
$ralClient += floatval($res['ral_quantite']);
//echo $ralClient.'/ ';
}
/*
if(array_key_exists('quantite', $res))
$stockReserveNouveau += floatval($res['quantite']);
*
*/
}
}
return $ralClient;
}
public function ralFournisseurPositifNegatif($articleId)
{
//$ralClient = $this->em->getRepository(ArticleCommande::class)->getRalClient($articleId);return $ralClient;
//return 2;
$article = $this->entityManager->getRepository(Article::class)->find($articleId);
$ralFournisseur = $article->getRalFournisseur();
$ralFournisseurPositif = 0;
$ralFournisseurNegatif = 0;
$ralFournisseurNegatif = $this->getRalFournisseur($article, true);
$ralFournisseurPositif = $article->getRalFournisseur() + abs($ralFournisseurNegatif);
return ['ralFournisseur' => $ralFournisseur, 'ralFournisseurPositif' => $ralFournisseurPositif, 'ralFournisseurNegatif' => $ralFournisseurNegatif];
}
public function ralClientPositifNegatif($articleId)
{
//$ralClient = $this->em->getRepository(ArticleCommande::class)->getRalClient($articleId);return $ralClient;
//return 2;
$article = $this->entityManager->getRepository(Article::class)->find($articleId);
$ralClient = 0;
$ralClientPositif = 0;
$ralClientNegatif = 0;
$composants = $this->entityManager->getRepository(ArticleComposant::class)->getComposantsComposeVirtuel($article)->getQuery()->getResult();
$reservations = $this->entityManager->getRepository(ArticleCommande::class)->getRalClientEtCmdAssociees($article, $composants);
//dump($reservations);
foreach ($reservations as $reservation) {
foreach ($reservation as $res) {
if (array_key_exists('ral_quantite', $res)) {
$ralClient += floatval($res['ral_quantite']);
if ($res['articleId'] != $articleId) {
if (floatval($res['ral_quantite']) > 0) {
$ralClientPositif += floatval($res['ral_quantite']);
}
if (floatval($res['ral_quantite']) < 0) {
$ralClientNegatif += floatval($res['ral_quantite']);
}
}
//if(floatval($res['ral_quantite']) > 0) $ralClientPositif += floatval($res['ral_quantite']);
//if(floatval($res['ral_quantite']) < 0) $ralClientNegatif += floatval($res['ral_quantite']);
//echo $ralClient.'/ ';
}
if ($res['articleId'] == $articleId) {
if (array_key_exists('ral_quantite_positive', $res)) {
$ralClientPositif += floatval($res['ral_quantite_positive']);
}
if (array_key_exists('ral_quantite_negative', $res)) {
$ralClientNegatif += floatval($res['ral_quantite_negative']);
}
}
}
}
return ['ralClient' => $ralClient, 'ralClientPositif' => $ralClientPositif, 'ralClientNegatif' => $ralClientNegatif];
}
public function getMarge($article)
{
if ( ! is_object($article)) {
$repo_article = $this->entityManager->getRepository(Article::class);
$article = $repo_article->find($article);
}
$prixVente = $article->getPrixVente();
$marge = 0;
$tauxMarge = 0;
$prixNetAchatEuro = 0;
$prixNetAchatEuro = $article->getPrixBase();
$marge = $prixVente - $prixNetAchatEuro;
if ($prixVente != '' && $prixVente != 0) {
$tauxMarge = $marge / $prixVente * 100;
} else {
$tauxMarge = 0;
}
$repo_condition_achat = $this->entityManager->getRepository(ConditionAchat::class);
$conditionAchat = $repo_condition_achat->findOneBy(['article' => $article, 'defaut' => true]);
if (is_object($conditionAchat)) {
$prixNetAchat = floatval($conditionAchat->getPrixAchatNet());
$coefficientConditionnement = floatval($conditionAchat->getCoefficientConditionnement());
if ($coefficientConditionnement != 0 && $coefficientConditionnement != 1) {
$prixNetAchat = $prixNetAchat / $coefficientConditionnement;
}
$tauxChange = 1;
$fournisseur = $conditionAchat->getFournisseur();
if (is_object($fournisseur)) {
$devise = $fournisseur->getDevise();
if (is_object($devise) && $devise->getTauxChange() != 0) {
$tauxChange = $devise->getTauxChange();
}
}
$prixNetAchatEuro = $prixNetAchat * $tauxChange;
$marge = $prixVente - $prixNetAchatEuro;
if ($prixVente != '' && $prixVente != 0) {
$tauxMarge = $marge / $prixVente * 100;
} else {
$tauxMarge = 0;
}
}
return ['marge' => $marge, 'tauxMarge' => $tauxMarge, 'prixNetAchatEuro' => $prixNetAchatEuro];
}
public function construireRequeteRechercheArticleChaine($param = [], $type = "rechercher", $param2 = [])
{
if ($type == "afficher") {
$sql = "SELECT id as '0',reference as '1',libelle as '2',prix_vente as '3',stock as '4' FROM article__article as a";
} elseif ($type == "rechercher") {
$sql = "SELECT a.id,libelle,reference FROM article__article as a";
} elseif ($type == "modifier") {
$sql = "SELECT a.id FROM article__article as a";
}
$where = "";
$join = "";
//print_r($param);
if (array_key_exists('dtc_articlesbundle_article', $param)) {
$parametre_article = $param['dtc_articlesbundle_article'];
if (array_key_exists('reference', $parametre_article) && trim($parametre_article['reference']) != "") {
if ($where == "") {
$where .= " WHERE ";
} else {
$where .= " AND ";
}
if (strpos($parametre_article['reference'], "*") !== false) {
$parametre_article['reference'] = str_replace("*", "%", $parametre_article['reference']);
$where .= "a.reference like '".$parametre_article['reference']."'";
} else {
$where .= "a.reference = '".$parametre_article['reference']."'";
}
}
for ($i = 1; $i < 12; $i++) {
if (array_key_exists('referenceAppel'.$i, $parametre_article) && trim($parametre_article['referenceAppel'.$i]) != "") {
if ($where == "") {
$where .= " WHERE ";
} else {
$where .= " AND ";
}
if (strpos($parametre_article['referenceAppel'.$i], "*") !== false) {
$parametre_article['referenceAppel'.$i] = str_replace("*", "%", $parametre_article['referenceAppel'.$i]);
$where .= "a.reference_appel_".$i." like '".$parametre_article['referenceAppel'.$i]."'";
} else {
$where .= "a.reference_appel_".$i." = '".$parametre_article['referenceAppel'.$i]."'";
}
}
}
if (array_key_exists('referenceFournisseur', $parametre_article) && trim($parametre_article['referenceFournisseur']) != "") {
if ($where == "") {
$where .= " WHERE ";
} else {
$where .= " AND ";
}
if (strpos($parametre_article['referenceFournisseur'], "*") !== false) {
$parametre_article['referenceFournisseur'] = str_replace("*", "%", $parametre_article['referenceFournisseur']);
$where .= "a.reference_fournisseur like '".$parametre_article['referenceFournisseur']."'";
} else {
$where .= "a.reference_fournisseur = '".$parametre_article['referenceFournisseur']."'";
}
//$where .= "a.reference_fournisseur = '".$parametre_article['referenceFournisseur']."'";
}
if (array_key_exists('referenceClient', $parametre_article) && trim($parametre_article['referenceClient']) != "") {
if ($where == "") {
$where .= " WHERE ";
} else {
$where .= " AND ";
}
if (strpos($parametre_article['referenceClient'], "*") !== false) {
$parametre_article['referenceClient'] = str_replace("*", "%", $parametre_article['referenceClient']);
$where .= "a.reference_client like '".$parametre_article['referenceClient']."'";
} else {
$where .= "a.reference_client = '".$parametre_article['referenceClient']."'";
}
//$where .= "a.reference_client = '".$parametre_article['referenceClient']."'";
}
if (array_key_exists('libelle', $parametre_article) && trim($parametre_article['libelle']) != "") {
if ($where == "") {
$where .= " WHERE ";
} else {
$where .= " AND ";
}
if (strpos($parametre_article['libelle'], "*") !== false) {
$parametre_article['libelle'] = str_replace("*", "%", $parametre_article['libelle']);
$where .= "a.libelle like '".$parametre_article['libelle']."'";
} else {
$where .= "a.libelle = '".$parametre_article['libelle']."'";
}
//$where .= "a.libelle = '".$parametre_article['libelle']."'";
}
if (array_key_exists('libelleSecondaire', $parametre_article) && trim($parametre_article['libelleSecondaire']) != "") {
if ($where == "") {
$where .= " WHERE ";
} else {
$where .= " AND ";
}
if (strpos($parametre_article['libelleSecondaire'], "*") !== false) {
$parametre_article['libelleSecondaire'] = str_replace("*", "%", $parametre_article['libelleSecondaire']);
$where .= "a.libelle_secondaire like '".$parametre_article['libelleSecondaire']."'";
} else {
$where .= "a.libelle_secondaire = '".$parametre_article['libelleSecondaire']."'";
}
//$where .= "a.libelle_secondaire = '".$parametre_article['libelleSecondaire']."'";
}
if (array_key_exists('seuilMiniCommandeFournisseur', $parametre_article) && trim($parametre_article['seuilMiniCommandeFournisseur']) != "") {
if ($where == "") {
$where .= " WHERE ";
} else {
$where .= " AND ";
}
$where .= "seuil_commande_f_mini = '".$parametre_article['seuilMiniCommandeFournisseur']."'";
}
if (array_key_exists('seuilMaxiCommandeFournisseur', $parametre_article) && trim($parametre_article['seuilMaxiCommandeFournisseur']) != "") {
if ($where == "") {
$where .= " WHERE ";
} else {
$where .= " AND ";
}
$where .= "seuil_commande_f_maxi = '".$parametre_article['seuilMaxiCommandeFournisseur']."'";
}
if (array_key_exists('conditionnement', $parametre_article) && trim($parametre_article['conditionnement']) != "") {
if ($where == "") {
$where .= " WHERE ";
} else {
$where .= " AND ";
}
$where .= "conditionnement = '".$parametre_article['conditionnement']."'";
}
if (array_key_exists('commentairePonctuel', $parametre_article) && trim($parametre_article['commentairePonctuel']) != "") {
if ($where == "") {
$where .= " WHERE ";
} else {
$where .= " AND ";
}
$where .= "commentaire = '".$parametre_article['commentairePonctuel']."'";
}
if (array_key_exists('descriptionCourte', $parametre_article) && trim($parametre_article['descriptionCourte']) != "") {
if ($where == "") {
$where .= " WHERE ";
} else {
$where .= " AND ";
}
$where .= "description_courte = '".$parametre_article['descriptionCourte']."'";
}
if (array_key_exists('description', $parametre_article) && trim($parametre_article['description']) != "") {
if ($where == "") {
$where .= " WHERE ";
} else {
$where .= " AND ";
}
$where .= "description = '".$parametre_article['description']."'";
}
if (array_key_exists('aConsigner', $parametre_article) && trim($parametre_article['aConsigner']) != "") {
if ($where == "") {
$where .= " WHERE ";
} else {
$where .= " AND ";
}
$where .= "a_consigner = '".$parametre_article['aConsigner']."'";
}
if (array_key_exists('consigne', $parametre_article) && trim($parametre_article['consigne']) != "") {
if ($where == "") {
$where .= " WHERE ";
} else {
$where .= " AND ";
}
$where .= "consigne = '".$parametre_article['consigne']."'";
}
if (array_key_exists('produitInterne', $parametre_article) && trim($parametre_article['produitInterne']) != "") {
if ($where == "") {
$where .= " WHERE ";
} else {
$where .= " AND ";
}
$where .= "produit_interne = '".$parametre_article['produitInterne']."'";
}
if (array_key_exists('virtuel', $parametre_article) && trim($parametre_article['virtuel']) != "") {
if ($where == "") {
$where .= " WHERE ";
} else {
$where .= " AND ";
}
$where .= "virtuel = '".$parametre_article['virtuel']."'";
}
if (array_key_exists('afficherComposantPdfInterne', $parametre_article) && trim($parametre_article['afficherComposantPdfInterne']) != "") {
if ($where == "") {
$where .= " WHERE ";
} else {
$where .= " AND ";
}
$where .= "afficher_composant_pdf_interne = '".$parametre_article['afficherComposantPdfInterne']."'";
}
if (array_key_exists('afficherComposantPdfExterne', $parametre_article) && trim($parametre_article['afficherComposantPdfExterne']) != "") {
if ($where == "") {
$where .= " WHERE ";
} else {
$where .= " AND ";
}
$where .= "afficher_composant_pdf_externe = '".$parametre_article['afficherComposantPdfExterne']."'";
}
if (array_key_exists('nonCommandable', $parametre_article) && trim($parametre_article['nonCommandable']) != "") {
if ($where == "") {
$where .= " WHERE ";
} else {
$where .= " AND ";
}
$where .= "non_commandable = '".$parametre_article['nonCommandable']."'";
}
if (array_key_exists('stockAuto', $parametre_article) && trim($parametre_article['stockAuto']) != "") {
if ($where == "") {
$where .= " WHERE ";
} else {
$where .= " AND ";
}
$where .= "stock_auto = '".$parametre_article['stockAuto']."'";
}
if (array_key_exists('nonStocke', $parametre_article) && trim($parametre_article['nonStocke']) != "") {
if ($where == "") {
$where .= " WHERE ";
} else {
$where .= " AND ";
}
$where .= "non_stocke = '".$parametre_article['nonStocke']."'";
}
if (array_key_exists('majPrix', $parametre_article) && trim($parametre_article['majPrix']) != "") {
if ($where == "") {
$where .= " WHERE ";
} else {
$where .= " AND ";
}
$where .= "maj_prix = '".$parametre_article['majPrix']."'";
}
if (array_key_exists('arretGamme', $parametre_article) && trim($parametre_article['arretGamme']) != "") {
if ($where == "") {
$where .= " WHERE ";
} else {
$where .= " AND ";
}
$where .= "arret_gamme = '".$parametre_article['arretGamme']."'";
}
if (array_key_exists('divers', $parametre_article) && trim($parametre_article['divers']) != "") {
if ($where == "") {
$where .= " WHERE ";
} else {
$where .= " AND ";
}
$where .= "divers = '".$parametre_article['divers']."'";
}
if (array_key_exists('prestation', $parametre_article) && trim($parametre_article['prestation']) != "") {
if ($where == "") {
$where .= " WHERE ";
} else {
$where .= " AND ";
}
$where .= "prestation = '".$parametre_article['prestation']."'";
}
if (array_key_exists('mainOeuvre', $parametre_article) && trim($parametre_article['mainOeuvre']) != "") {
if ($where == "") {
$where .= " WHERE ";
} else {
$where .= " AND ";
}
$where .= "main_oeuvre = '".$parametre_article['mainOeuvre']."'";
}
if (array_key_exists('statut', $parametre_article) && trim($parametre_article['statut']) != "") {
if ($where == "") {
$where .= " WHERE ";
} else {
$where .= " AND ";
}
$where .= "statut = '".$parametre_article['statut']."'";
}
if (array_key_exists('largeur', $parametre_article) && trim($parametre_article['largeur']) != "") {
if ($where == "") {
$where .= " WHERE ";
} else {
$where .= " AND ";
}
$where .= "largeur = '".$parametre_article['largeur']."'";
}
if (array_key_exists('profondeur', $parametre_article) && trim($parametre_article['profondeur']) != "") {
if ($where == "") {
$where .= " WHERE ";
} else {
$where .= " AND ";
}
$where .= "profondeur = '".$parametre_article['profondeur']."'";
}
if (array_key_exists('hauteur', $parametre_article) && trim($parametre_article['hauteur']) != "") {
if ($where == "") {
$where .= " WHERE ";
} else {
$where .= " AND ";
}
$where .= "hauteur = '".$parametre_article['hauteur']."'";
}
if (array_key_exists('poids', $parametre_article) && trim($parametre_article['poids']) != "") {
if ($where == "") {
$where .= " WHERE ";
} else {
$where .= " AND ";
}
$where .= "poids = '".$parametre_article['poids']."'";
}
if (array_key_exists('nomWeb', $parametre_article) && trim($parametre_article['nomWeb']) != "") {
if ($where == "") {
$where .= " WHERE ";
} else {
$where .= " AND ";
}
if (strpos($parametre_article['nomWeb'], "*") !== false) {
$parametre_article['nomWeb'] = str_replace("*", "%", $parametre_article['nomWeb']);
$where .= "a.nom_web like '".$parametre_article['nomWeb']."'";
} else {
$where .= "a.nom_web = '".$parametre_article['nomWeb']."'";
}
//$where .= "nom_web = '".$parametre_article['nomWeb']."'";
}
if (array_key_exists('referenceWeb', $parametre_article) && trim($parametre_article['referenceWeb']) != "") {
if ($where == "") {
$where .= " WHERE ";
} else {
$where .= " AND ";
}
if (strpos($parametre_article['referenceWeb'], "*") !== false) {
$parametre_article['referenceWeb'] = str_replace("*", "%", $parametre_article['referenceWeb']);
$where .= "a.reference_web like '".$parametre_article['referenceWeb']."'";
} else {
$where .= "a.reference_web = '".$parametre_article['referenceWeb']."'";
}
//$where .= "reference_web = '".$parametre_article['referenceWeb']."'";
}
if (array_key_exists('referenceFournisseurWeb', $parametre_article) && trim($parametre_article['referenceFournisseurWeb']) != "") {
if ($where == "") {
$where .= " WHERE ";
} else {
$where .= " AND ";
}
if (strpos($parametre_article['referenceFournisseurWeb'], "*") !== false) {
$parametre_article['referenceFournisseurWeb'] = str_replace("*", "%", $parametre_article['referenceFournisseurWeb']);
$where .= "a.reference_fournisseur_web like '".$parametre_article['referenceFournisseurWeb']."'";
} else {
$where .= "a.reference_fournisseur_web = '".$parametre_article['referenceFournisseurWeb']."'";
}
//$where .= "reference_fournisseur_web = '".$parametre_article['referenceFournisseurWeb']."'";
}
if (array_key_exists('descriptionWeb', $parametre_article) && trim($parametre_article['descriptionWeb']) != "") {
if ($where == "") {
$where .= " WHERE ";
} else {
$where .= " AND ";
}
$where .= "description_web = '".$parametre_article['descriptionWeb']."'";
}
if (array_key_exists('resumeWeb', $parametre_article) && trim($parametre_article['resumeWeb']) != "") {
if ($where == "") {
$where .= " WHERE ";
} else {
$where .= " AND ";
}
$where .= "resume_web = '".$parametre_article['resumeWeb']."'";
}
if (array_key_exists('ecotaxe', $parametre_article) && trim($parametre_article['ecotaxe']) != "") {
if ($where == "") {
$where .= " WHERE ";
} else {
$where .= " AND ";
}
$where .= "ecotaxe = '".$parametre_article['ecotaxe']."'";
}
if (array_key_exists('remiseMax', $parametre_article) && trim($parametre_article['remiseMax']) != "") {
if ($where == "") {
$where .= " WHERE ";
} else {
$where .= " AND ";
}
$where .= "remise_max = '".$parametre_article['remiseMax']."'";
}
if (array_key_exists('marque', $parametre_article) && trim($parametre_article['marque']) != "" && trim($parametre_article['marque']) != "0") {
if ($where == "") {
$where .= " WHERE ";
} else {
$where .= " AND ";
}
$where .= "marque_id = '".$parametre_article['marque']."'";
}
if (array_key_exists('uniteMesure', $parametre_article) && trim($parametre_article['uniteMesure']) != "" && trim($parametre_article['uniteMesure']) != "0") {
if ($where == "") {
$where .= " WHERE ";
} else {
$where .= " AND ";
}
$where .= "unite_mesure_id = '".$parametre_article['uniteMesure']."'";
}
if (array_key_exists('categorieRemiseArticle', $parametre_article) && trim($parametre_article['categorieRemiseArticle']) != "" && trim(
$parametre_article['categorieRemiseArticle']
) != "0") {
if ($where == "") {
$where .= " WHERE ";
} else {
$where .= " AND ";
}
$where .= "categorie_remise_article_id = '".$parametre_article['categorieRemiseArticle']."'";
}
if (array_key_exists('type', $parametre_article) && trim($parametre_article['type']) != "" && trim($parametre_article['type']) != "0") {
if ($where == "") {
$where .= " WHERE ";
} else {
$where .= " AND ";
}
$where .= "type_id = '".$parametre_article['type']."'";
}
if (array_key_exists('regleTaxe', $parametre_article) && trim($parametre_article['regleTaxe']) != "" && trim($parametre_article['regleTaxe']) != "0") {
if ($where == "") {
$where .= " WHERE ";
} else {
$where .= " AND ";
}
$where .= "regle_taxe_id = '".$parametre_article['regleTaxe']."'";
}
/*
if (array_key_exists('typeRemiseMax', $parametre_article) && trim($parametre_article['typeRemiseMax']) != "" && trim($parametre_article['typeRemiseMax']) != "0") {
if($where == "") $where .= " WHERE ";
else $where .= " AND ";
$where .= "type_remise_max = '".$parametre_article['typeRemiseMax']."'";
}
*/
if (array_key_exists('familleCompta', $parametre_article) && trim($parametre_article['familleCompta']) != "" && trim($parametre_article['familleCompta']) != "0") {
if ($where == "") {
$where .= " WHERE ";
} else {
$where .= " AND ";
}
$where .= "famille_compta_id = '".$parametre_article['familleCompta']."'";
}
if (array_key_exists('conditionsAchat', $param['dtc_articlesbundle_article'])) {
$parametre_cond_achat = $param['dtc_articlesbundle_article']['conditionsAchat'];
//print_r($parametre_cond_achat);
//echo "<div>OK</div>";
$sql_cond_achat = "a.id IN (SELECT article_id FROM article__condition_achat ";
$where_cond_achat = "";
if (array_key_exists('referenceFournisseur', $parametre_cond_achat) && trim($parametre_cond_achat['referenceFournisseur']) != "") {
if ($where_cond_achat == "") {
$where_cond_achat .= " WHERE ";
} else {
$where_cond_achat .= " AND ";
}
$where_cond_achat .= "reference_fournisseur = '".$parametre_cond_achat['referenceFournisseur']."'";
}
if (array_key_exists('libelle', $parametre_cond_achat) && trim($parametre_cond_achat['libelle']) != "") {
if ($where_cond_achat == "") {
$where_cond_achat .= " WHERE ";
} else {
$where_cond_achat .= " AND ";
}
$where_cond_achat .= "libelle = '".$parametre_cond_achat['libelle']."'";
}
if (array_key_exists('quantite', $parametre_cond_achat) && trim($parametre_cond_achat['quantite']) != "") {
if ($where_cond_achat == "") {
$where_cond_achat .= " WHERE ";
} else {
$where_cond_achat .= " AND ";
}
$where_cond_achat .= "quantite = '".$parametre_cond_achat['quantite']."'";
}
if (array_key_exists('conditionnement', $parametre_cond_achat) && trim($parametre_cond_achat['conditionnement']) != "") {
if ($where_cond_achat == "") {
$where_cond_achat .= " WHERE ";
} else {
$where_cond_achat .= " AND ";
}
$where_cond_achat .= "conditionnement = '".$parametre_cond_achat['conditionnement']."'";
}
if (array_key_exists('prixAchatBrut', $parametre_cond_achat) && trim($parametre_cond_achat['prixAchatBrut']) != "") {
$parametre_cond_achat['prixAchatBrut'] = str_replace(",", ".", $parametre_cond_achat['prixAchatBrut']);
if ($where_cond_achat == "") {
$where_cond_achat .= " WHERE ";
} else {
$where_cond_achat .= " AND ";
}
$where_cond_achat .= "prix_achat_brut = '".$parametre_cond_achat['prixAchatBrut']."'";
}
if (array_key_exists('tauxRemise', $parametre_cond_achat) && trim($parametre_cond_achat['tauxRemise']) != "") {
if ($where_cond_achat == "") {
$where_cond_achat .= " WHERE ";
} else {
$where_cond_achat .= " AND ";
}
$where_cond_achat .= "taux_remise = '".$parametre_cond_achat['tauxRemise']."'";
}
if (array_key_exists('tauxRemiseSupplementaire', $parametre_cond_achat) && trim($parametre_cond_achat['tauxRemiseSupplementaire']) != "") {
if ($where_cond_achat == "") {
$where_cond_achat .= " WHERE ";
} else {
$where_cond_achat .= " AND ";
}
$where_cond_achat .= "taux_remise_supplementaire = '".$parametre_cond_achat['tauxRemiseSupplementaire']."'";
}
if (array_key_exists('prixAchatNet', $parametre_cond_achat) && trim($parametre_cond_achat['prixAchatNet']) != "") {
$parametre_cond_achat['prixAchatNet'] = str_replace(",", ".", $parametre_cond_achat['prixAchatNet']);
if ($where_cond_achat == "") {
$where_cond_achat .= " WHERE ";
} else {
$where_cond_achat .= " AND ";
}
$where_cond_achat .= "prix_achat_net = '".$parametre_cond_achat['prixAchatNet']."'";
}
if (array_key_exists('fournisseur', $parametre_cond_achat) && trim($parametre_cond_achat['fournisseur']) != "") {
if ($where_cond_achat == "") {
$where_cond_achat .= " WHERE ";
} else {
$where_cond_achat .= " AND ";
}
$where_cond_achat .= "fournisseur_id = '".$parametre_cond_achat['fournisseur']."'";
}
$sql_cond_achat .= $where_cond_achat;
if ($sql_cond_achat != "a.id IN (SELECT article_id FROM article__condition_achat ") {
$sql_cond_achat .= " AND statut = '1')";
if ($where == "") {
$where .= " WHERE ";
} else {
$where .= " AND ";
}
$where .= $sql_cond_achat;
}
}
}
if (array_key_exists('categories', $param) && count($param['categories']) > 0) {
$parametre_categorie = $param['categories'];
//$join .= " LEFT JOIN article__article_categorie cat on cat.article_id = a.id";
for ($i = 0; $i < count($parametre_categorie); $i++) {
if ($where == "") {
$where .= " WHERE ";
} else {
$where .= " AND ";
}
$where .= "a.id IN (SELECT article_id FROM article__article_categorie WHERE categorie_id IN (";
$where .= $parametre_categorie[$i].",";
$where .= ",";
$where = str_replace(",,", "", $where);
$where .= "))";
}
}
if ($param2 != null) {
if (array_key_exists('articleEnleve', $param2) && trim($param2['articleEnleve']) != "") {
if ($where == "") {
$where .= " WHERE ";
} else {
$where .= " AND ";
}
$article = explode("|", $param2['articleEnleve']);
$i = 0;
foreach ($article as $articleEnleve) {
if ($i == 0) {
$where .= " id != '".$articleEnleve." ' ";
} elseif ($i == sizeof($article) - 1) {
} else {
$where .= " AND id != '".$articleEnleve." ' ";
}
$i++;
}
}
}
if ($type == "modifier") {
$sql = $where;
} else {
$sql = $sql.$join.$where;
}
//echo "<div><br/>".$sql."</div>";
//exit;
return $sql;
}
public function rechercheArticleChaine($param = [], $type = "rechercher", $param2 = [])
{
$results = [];
$countResults = 0;
$conn = $this->entityManager->getConnection();
$sql_recherche = $this->construireRequeteRechercheArticleChaine($param, $type, $param2);
$stmt = $conn->prepare(trim($sql_recherche));
//echo "<div>".$sql_recherche."</div>";
$query = $stmt->executeQuery();
$results = $query->fetchAllAssociative();
$countResults = $query->rowCount();
$tabRetour = ["resultats" => $results, "nbResultats" => $countResults];
return $tabRetour;
}
public function modifierArticleChaine($param_recherche = [], $param_valeur = [])
{
//print_r($param_valeur);
$sql_update = "UPDATE `article__article` as a SET";
$conn = $this->entityManager->getConnection();
$sql_recherche = $this->construireRequeteRechercheArticleChaine($param_recherche, "modifier", $param_valeur);
$liste_resultats = "";
if (array_key_exists('dtc_articlesbundle_article', $param_valeur)) {
$parametre_article = $param_valeur['dtc_articlesbundle_article'];
/*
if (array_key_exists('libelle', $parametre_article) && trim($parametre_article['libelle']) != "") {
$sql_update.= " x.libelle = '".trim($parametre_article['libelle'])."'";
}
*/
if (array_key_exists('libelle', $parametre_article) && trim($parametre_article['libelle']) != "") {
$sql_update .= " a.libelle = '".trim($parametre_article['libelle'])."',";
}
if (array_key_exists('referenceFournisseur', $parametre_article) && trim($parametre_article['referenceFournisseur']) != "") {
$sql_update .= " a.reference_fournisseur = '".$parametre_article['referenceFournisseur']."',";
}
if (array_key_exists('referenceClient', $parametre_article) && trim($parametre_article['referenceClient']) != "") {
$sql_update .= " a.reference_client = '".$parametre_article['referenceClient']."',";
}
if (array_key_exists('libelleSecondaire', $parametre_article) && trim($parametre_article['libelleSecondaire']) != "") {
$sql_update .= " a.libelle_secondaire = '".$parametre_article['libelleSecondaire']."',";
}
if (array_key_exists('seuilMiniCommandeFournisseur', $parametre_article) && trim($parametre_article['seuilMiniCommandeFournisseur']) != "") {
$sql_update .= " seuil_commande_f_mini = '".$parametre_article['seuilMiniCommandeFournisseur']."',";
}
if (array_key_exists('seuilMaxiCommandeFournisseur', $parametre_article) && trim($parametre_article['seuilMaxiCommandeFournisseur']) != "") {
$sql_update .= " seuil_commande_f_maxi = '".$parametre_article['seuilMaxiCommandeFournisseur']."',";
}
if (array_key_exists('conditionnement', $parametre_article) && trim($parametre_article['conditionnement']) != "") {
$sql_update .= " conditionnement = '".$parametre_article['conditionnement']."',";
}
if (array_key_exists('commentairePonctuel', $parametre_article) && trim($parametre_article['commentairePonctuel']) != "") {
$sql_update .= " commentaire = '".$parametre_article['commentairePonctuel']."',";
}
if (array_key_exists('descriptionCourte', $parametre_article) && trim($parametre_article['descriptionCourte']) != "") {
$sql_update .= " description_courte = '".$parametre_article['descriptionCourte']."',";
}
if (array_key_exists('description', $parametre_article) && trim($parametre_article['description']) != "") {
$sql_update .= " description = '".$parametre_article['description']."',";
}
if (array_key_exists('aConsigner', $parametre_article) && trim($parametre_article['aConsigner']) != "") {
$sql_update .= " a_consigner = '".$parametre_article['aConsigner']."',";
}
if (array_key_exists('consigne', $parametre_article) && trim($parametre_article['consigne']) != "") {
$sql_update .= " consigne = '".$parametre_article['consigne']."',";
}
if (array_key_exists('produitInterne', $parametre_article) && trim($parametre_article['produitInterne']) != "") {
$sql_update .= " produit_interne = '".$parametre_article['produitInterne']."',";
}
if (array_key_exists('virtuel', $parametre_article) && trim($parametre_article['virtuel']) != "") {
$sql_update .= " virtuel = '".$parametre_article['virtuel']."',";
}
if (array_key_exists('afficherComposantPdfInterne', $parametre_article) && trim($parametre_article['afficherComposantPdfInterne']) != "") {
$sql_update .= " afficher_composant_pdf_interne = '".$parametre_article['afficherComposantPdfInterne']."',";
}
if (array_key_exists('afficherComposantPdfExterne', $parametre_article) && trim($parametre_article['afficherComposantPdfExterne']) != "") {
$sql_update .= " afficher_composant_pdf_externe = '".$parametre_article['afficherComposantPdfExterne']."',";
}
if (array_key_exists('nonCommandable', $parametre_article) && trim($parametre_article['nonCommandable']) != "") {
$sql_update .= " non_commandable = '".$parametre_article['nonCommandable']."',";
}
if (array_key_exists('stockAuto', $parametre_article) && trim($parametre_article['stockAuto']) != "") {
$sql_update .= " stock_auto = '".$parametre_article['stockAuto']."',";
}
if (array_key_exists('nonStocke', $parametre_article) && trim($parametre_article['nonStocke']) != "") {
$sql_update .= " non_stocke = '".$parametre_article['nonStocke']."',";
}
if (array_key_exists('majPrix', $parametre_article) && trim($parametre_article['majPrix']) != "") {
$sql_update .= " maj_prix = '".$parametre_article['majPrix']."',";
}
if (array_key_exists('arretGamme', $parametre_article) && trim($parametre_article['arretGamme']) != "") {
$sql_update .= " arret_gamme = '".$parametre_article['arretGamme']."',";
}
if (array_key_exists('divers', $parametre_article) && trim($parametre_article['divers']) != "") {
$sql_update .= " divers = '".$parametre_article['divers']."',";
}
if (array_key_exists('prestation', $parametre_article) && trim($parametre_article['prestation']) != "") {
$sql_update .= " prestation = '".$parametre_article['prestation']."',";
}
if (array_key_exists('mainOeuvre', $parametre_article) && trim($parametre_article['mainOeuvre']) != "") {
$sql_update .= " main_oeuvre = '".$parametre_article['mainOeuvre']."',";
}
if (array_key_exists('statut', $parametre_article) && trim($parametre_article['statut']) != "") {
$sql_update .= " statut = '".$parametre_article['statut']."',";
}
if (array_key_exists('largeur', $parametre_article) && trim($parametre_article['largeur']) != "") {
$sql_update .= " largeur = '".$parametre_article['largeur']."',";
}
if (array_key_exists('profondeur', $parametre_article) && trim($parametre_article['profondeur']) != "") {
$sql_update .= " profondeur = '".$parametre_article['profondeur']."',";
}
if (array_key_exists('hauteur', $parametre_article) && trim($parametre_article['hauteur']) != "") {
$sql_update .= " hauteur = '".$parametre_article['hauteur']."',";
}
if (array_key_exists('poids', $parametre_article) && trim($parametre_article['poids']) != "") {
$sql_update .= " poids = '".$parametre_article['poids']."',";
}
if (array_key_exists('nomWeb', $parametre_article) && trim($parametre_article['nomWeb']) != "") {
$sql_update .= " nom_web = '".$parametre_article['nomWeb']."',";
}
if (array_key_exists('referenceWeb', $parametre_article) && trim($parametre_article['referenceWeb']) != "") {
$sql_update .= " reference_web = '".$parametre_article['referenceWeb']."',";
}
if (array_key_exists('referenceFournisseurWeb', $parametre_article) && trim($parametre_article['referenceFournisseurWeb']) != "") {
$sql_update .= " reference_fournisseur_web = '".$parametre_article['referenceFournisseurWeb']."',";
}
if (array_key_exists('descriptionWeb', $parametre_article) && trim($parametre_article['descriptionWeb']) != "") {
$sql_update .= " description_web = '".$parametre_article['descriptionWeb']."',";
}
if (array_key_exists('resumeWeb', $parametre_article) && trim($parametre_article['resumeWeb']) != "") {
$sql_update .= " resume_web = '".$parametre_article['resumeWeb']."',";
}
if (array_key_exists('marque', $parametre_article) && trim($parametre_article['marque']) != "" && trim($parametre_article['marque']) != "0") {
$sql_update .= " marque_id = '".$parametre_article['marque']."',";
}
if (array_key_exists('categorieRemiseArticle', $parametre_article) && trim($parametre_article['categorieRemiseArticle']) != "" && trim(
$parametre_article['categorieRemiseArticle']
) != "0") {
$sql_update .= " categorie_remise_article_id = '".$parametre_article['categorieRemiseArticle']."',";
}
if (array_key_exists('type', $parametre_article) && trim($parametre_article['type']) != "" && trim($parametre_article['type']) != "0") {
$sql_update .= " type_id = '".$parametre_article['type']."',";
}
if (array_key_exists('regleTaxe', $parametre_article) && trim($parametre_article['regleTaxe']) != "" && trim($parametre_article['regleTaxe']) != "0") {
$sql_update .= " regle_taxe_id = '".$parametre_article['regleTaxe']."',";
}
if (array_key_exists('familleCompta', $parametre_article) && trim($parametre_article['familleCompta']) != "" && trim($parametre_article['familleCompta']) != "0") {
$sql_update .= " famille_compta_id = '".$parametre_article['familleCompta']."',";
}
$sql_update .= ",";
$sql_update = str_replace(",,", "", $sql_update);
}
if ($sql_update == "UPDATE `article__article` as a SET,") {
//echo "<div>PAS UPDATE</div>";
} else {
$sql_update .= $sql_recherche;
//echo "<div>SQL UPDATE : ".$sql_update."</div>";
$stmt = $conn->prepare(trim($sql_update));
$nbLignes = $stmt->executeQuery()->rowCount();
//exit;
}
if (
(array_key_exists('prixBase', $parametre_article) && trim($parametre_article['prixBase']) != "")
or
(array_key_exists('prixVente', $parametre_article) && trim($parametre_article['prixVente']) != "")
or
(array_key_exists('coefficientPrixBaseVente', $parametre_article) && trim($parametre_article['coefficientPrixBaseVente']) != "")
or
(array_key_exists('tauxMarge', $parametre_article) && trim($parametre_article['tauxMarge']) != "")
) {
$liste_resultats = $this->rechercheArticleChaine($param_recherche, "rechercher", $param_valeur);
$articles = $liste_resultats["resultats"];
$nbLignes = count($articles);
$repoArticle = $this->entityManager->getRepository(Article::class);
for ($i = 0; $i < count($articles); $i++) {
$article = $repoArticle->find($articles[$i]["id"]);
if (is_object($article)) {
//print_r($parametre_article);
//echo "TOTO";
$prixBase = "";
$prixVente = "";
$coefficientPrixBaseVente = "";
$tauxMarge = "";
if (array_key_exists('prixBase', $parametre_article) && trim($parametre_article['prixBase']) != "" && trim($parametre_article['prixBase']) != 0) {
$prixBase = trim($parametre_article['prixBase']);
} else {
$prixBase = $article->getPrixBase();
}
if (array_key_exists('prixVente', $parametre_article) && trim($parametre_article['prixVente']) != "" && trim($parametre_article['prixVente']) != 0) {
$prixVente = trim($parametre_article['prixVente']);
} else {
$prixVente = $article->getPrixVente();
}
if (array_key_exists('coefficientPrixBaseVente', $parametre_article) && trim($parametre_article['coefficientPrixBaseVente']) != "" && trim(
$parametre_article['coefficientPrixBaseVente']
) != 0) {
$coefficientPrixBaseVente = trim($parametre_article['coefficientPrixBaseVente']);
} else {
$coefficientPrixBaseVente = $article->getCoefficientPrixBaseVente();
}
if (array_key_exists('tauxMarge', $parametre_article) && trim($parametre_article['tauxMarge']) != "") {
$tauxMarge = trim($parametre_article['tauxMarge']);
} else {
$tauxMarge = $article->getTauxMarge();
}
if (array_key_exists('prixBase', $parametre_article) && trim($parametre_article['prixBase']) != ""
&& array_key_exists('coefficientPrixBaseVente', $parametre_article) && trim($parametre_article['coefficientPrixBaseVente']) != ""
&& array_key_exists('prixVente', $parametre_article) && trim($parametre_article['prixVente']) != ""
) {
$prixVente = $prixBase * $coefficientPrixBaseVente;
//$article->setCommentairePonctuel('cas 1');
} elseif (array_key_exists('prixBase', $parametre_article) && trim($parametre_article['prixBase']) != "" && trim($parametre_article['prixBase']) != 0
&& array_key_exists('coefficientPrixBaseVente', $parametre_article) && trim($parametre_article['coefficientPrixBaseVente']) != ""
) {
$prixVente = $prixBase * $coefficientPrixBaseVente;
//$article->setCommentairePonctuel('cas 2');
} elseif (array_key_exists('prixBase', $parametre_article) && trim($parametre_article['prixBase']) != "" && trim($parametre_article['prixBase']) != 0
&& array_key_exists('prixVente', $parametre_article) && trim($parametre_article['prixVente']) != "" && trim($parametre_article['prixVente']) != 0
) {
$coefficientPrixBaseVente = $prixVente / $prixBase;
//$article->setCommentairePonctuel('cas 3');
} elseif (array_key_exists('prixBase', $parametre_article) && trim($parametre_article['prixBase']) != "" && trim($parametre_article['prixBase']) != 0
) {
if ($article->getMajPrix()) {
$prixVente = $prixBase * $coefficientPrixBaseVente;
//$article->setCommentairePonctuel('cas 4');
} else {
$coefficientPrixBaseVente = $prixVente / $prixBase;
//$article->setCommentairePonctuel('cas 5');
}
} elseif (array_key_exists('coefficientPrixBaseVente', $parametre_article) && trim($parametre_article['coefficientPrixBaseVente']) != ""
&& array_key_exists('prixVente', $parametre_article) && trim($parametre_article['prixVente']) != ""
) {
$prixBase = $prixVente / $coefficientPrixBaseVente;
//$article->setCommentairePonctuel('cas 6');
} elseif (array_key_exists('prixVente', $parametre_article) && trim($parametre_article['prixVente']) != ""
) {
$coefficientPrixBaseVente = $prixVente / $prixBase;
//$article->setCommentairePonctuel('cas 7');
} elseif (array_key_exists('coefficientPrixBaseVente', $parametre_article) && trim($parametre_article['coefficientPrixBaseVente']) != ""
) {
$prixVente = $prixBase * $coefficientPrixBaseVente;
//$article->setCommentairePonctuel('cas 8');
} else {
//$article->setCommentairePonctuel('cas 9');
}
$margeReelle = round($prixVente - $article->getCpump(), 2);
$article->setPrixBase(round($prixBase, 2));
$article->setPrixVente($prixVente);
$article->setCoefficientPrixBaseVente(round($coefficientPrixBaseVente, 2));
//$article->setTauxMarge(round($tauxMarge,2));
//$article->setMarge(round($marge,2));
$article->setMargeReelle(round($margeReelle, 2));
$this->entityManager->persist($article);
//$this->em->refresh($article);
if ($article->getMajPrix()) {
//Mettre a jour la condition d'achat
$this->majCondHaEnFonctionPrixBase($article);
}
}
}
$this->entityManager->flush();
}
if (array_key_exists('conditionsAchat', $parametre_article)) {
$parametre_cond_achat = $parametre_article['conditionsAchat'];
//print_r($parametre_cond_achat);
//echo "<div>OK cond achat</div>";
$maj_cond_achat = false;
$maj_cond_achat_prix = false;
if (
(array_key_exists('referenceFournisseur', $parametre_cond_achat) && trim($parametre_cond_achat['referenceFournisseur']) != "")
or
(array_key_exists('libelle', $parametre_cond_achat) && trim($parametre_cond_achat['libelle']) != "")
or
(array_key_exists('quantite', $parametre_cond_achat) && trim($parametre_cond_achat['quantite']) != "")
or
(array_key_exists('conditionnement', $parametre_cond_achat) && trim($parametre_cond_achat['conditionnement']) != "")
or
(array_key_exists('prixAchatBrut', $parametre_cond_achat) && trim($parametre_cond_achat['prixAchatBrut']) != "")
or
(array_key_exists('tauxRemise', $parametre_cond_achat) && trim($parametre_cond_achat['tauxRemise']) != "")
or
(array_key_exists('tauxRemiseSupplementaire', $parametre_cond_achat) && trim($parametre_cond_achat['tauxRemiseSupplementaire']) != "")
or
(array_key_exists('prixAchatNet', $parametre_cond_achat) && trim($parametre_cond_achat['prixAchatNet']) != "")
or
(array_key_exists('fournisseur', $parametre_cond_achat) && trim($parametre_cond_achat['fournisseur']) != "")
or
(array_key_exists('fraisAnnexes', $parametre_cond_achat) && trim($parametre_cond_achat['fraisAnnexes']) != "")
or
(array_key_exists('coefficient', $parametre_cond_achat) && trim($parametre_cond_achat['coefficient']) != "")
) {
$maj_cond_achat = true;
}
if ($maj_cond_achat) {
$repoArticle = $this->entityManager->getRepository(Article::class);
$repoCondAchat = $this->entityManager->getRepository(ConditionAchat::class);
if ( ! is_array($liste_resultats)) {
$liste_resultats = $this->rechercheArticleChaine($param_recherche, "rechercher");
}
$articles = $liste_resultats["resultats"];
$nbLignes = count($articles);
for ($i = 0; $i < count($articles); $i++) {
$sql_cond_achat = "UPDATE article__condition_achat SET ";
//echo "<div>ART : ".$articles[$i]["id"]."</div>";
if (array_key_exists('referenceFournisseur', $parametre_cond_achat) && trim($parametre_cond_achat['referenceFournisseur']) != "") {
$sql_cond_achat .= " reference_fournisseur = '".$parametre_cond_achat['referenceFournisseur']."',";
}
if (array_key_exists('libelle', $parametre_cond_achat) && trim($parametre_cond_achat['libelle']) != "") {
$sql_cond_achat .= " libelle = '".$parametre_cond_achat['libelle']."',";
}
if (array_key_exists('quantite', $parametre_cond_achat) && trim($parametre_cond_achat['quantite']) != "") {
$sql_cond_achat .= " quantite = '".$parametre_cond_achat['quantite']."',";
}
if (array_key_exists('conditionnement', $parametre_cond_achat) && trim($parametre_cond_achat['conditionnement']) != "") {
$sql_cond_achat .= " conditionnement = '".$parametre_cond_achat['conditionnement']."',";
}
if (array_key_exists('fournisseur', $parametre_cond_achat) && trim($parametre_cond_achat['fournisseur']) != "") {
$sql_cond_achat .= " fournisseur_id = '".$parametre_cond_achat['fournisseur']."',";
}
if (array_key_exists('fraisAnnexes', $parametre_cond_achat) && trim($parametre_cond_achat['fraisAnnexes']) != "") {
$sql_cond_achat .= " frais_annexes = '".$parametre_cond_achat['fraisAnnexes']."',";
}
if (array_key_exists('coefficient', $parametre_cond_achat) && trim($parametre_cond_achat['coefficient']) != "") {
$sql_cond_achat .= " coefficient = '".$parametre_cond_achat['coefficient']."',";
}
if (
(array_key_exists('prixAchatBrut', $parametre_cond_achat) && trim($parametre_cond_achat['prixAchatBrut']) != "")
or
(array_key_exists('tauxRemise', $parametre_cond_achat) && trim($parametre_cond_achat['tauxRemise']) != "")
or
(array_key_exists('tauxRemiseSupplementaire', $parametre_cond_achat) && trim($parametre_cond_achat['tauxRemiseSupplementaire']) != "")
or
(array_key_exists('prixAchatNet', $parametre_cond_achat) && trim($parametre_cond_achat['prixAchatNet']) != "")
or
(array_key_exists('coefficient', $parametre_cond_achat) && trim($parametre_cond_achat['coefficient']) != "")
or
(array_key_exists('fraisAnnexes', $parametre_cond_achat) && trim($parametre_cond_achat['fraisAnnexes']) != "")
) {
$maj_cond_achat_prix = true;
$article = $repoArticle->find($articles[$i]["id"]);
if (is_object($article)) {
$condition = $repoCondAchat->findOneBy(["article" => $article, "defaut" => "1"]);
if (is_object($condition)) {
//echo "<div>COND ACHAT ".$condition->getId()."</div>";
$prixAchatBrut = "";
$tauxRemise = "";
$tauxRemiseSupplementaire = "";
$prixAchatNet = "";
if (array_key_exists('prixAchatBrut', $parametre_cond_achat) && trim($parametre_cond_achat['prixAchatBrut']) != "") {
$condition->setPrixAchatBrut(trim($parametre_cond_achat['prixAchatBrut']));
}
if (array_key_exists('tauxRemise', $parametre_cond_achat) && trim($parametre_cond_achat['tauxRemise']) != "") {
$condition->setTauxRemise(trim($parametre_cond_achat['tauxRemise']));
}
if (array_key_exists('tauxRemise', $parametre_cond_achat) && trim($parametre_cond_achat['tauxRemise']) != "") {
$condition->setTauxRemise(trim($parametre_cond_achat['tauxRemise']));
}
if (array_key_exists('tauxRemiseSupplementaire', $parametre_cond_achat) && trim($parametre_cond_achat['tauxRemiseSupplementaire']) != "") {
$condition->setTauxRemiseSupplementaire(trim($parametre_cond_achat['tauxRemiseSupplementaire']));
}
if (array_key_exists('coefficient', $parametre_cond_achat) && trim($parametre_cond_achat['coefficient']) != "") {
$condition->setCoefficient(trim($parametre_cond_achat['coefficient']));
}
if (array_key_exists('fraisAnnexes', $parametre_cond_achat) && trim($parametre_cond_achat['fraisAnnexes']) != "") {
$condition->setFraisAnnexes(trim($parametre_cond_achat['fraisAnnexes']));
}
//Calcul du prix achat net
$prixAchatNet = $condition->getPrixAchatBrut() * (1 - ($condition->getTauxRemise() / 100)) * (1 - ($condition->getTauxRemiseSupplementaire() / 100));
$coefficient = $condition->getCoefficient();
if ($coefficient != 0) {
$prixAchatNet = $prixAchatNet * $coefficient;
}
$prixAchatNet += $condition->getFraisAnnexes();
$condition->setPrixAchatNet($prixAchatNet);
//Calcul du coefficient
/*
if($prixAchatNet > 0){
$coefficient = $condition->getPrixAchatBrut() / $prixAchatNet;
$condition->setCoefficient($coefficient);
}
*
*/
$this->majEnFonctionDuPrixAchat($article, $condition->getPrixAchatBrut());
$this->entityManager->persist($condition);
}
}
}
if ($sql_cond_achat != "UPDATE article__condition_achat SET ") {
$sql_cond_achat .= ",";
$sql_cond_achat = str_replace(",,", "", $sql_cond_achat);
$sql_cond_achat .= " WHERE article_id = '".$articles[$i]["id"]."' and statut = '1'";
//echo "<div>SQL COND ACHAT : ".$sql_cond_achat." <br/><br/></div>";
$stmt = $conn->prepare($sql_cond_achat);
$stmt->executeQuery();
}
}
if ($maj_cond_achat_prix) {
$this->entityManager->flush();
}
}
}
$user = $this->security->getUser();
$chemin_pic = $_SERVER["DOCUMENT_ROOT"]."/uploads/tmp/articles/user/".$user->getId()."/images/".$param_valeur['tokenPicture'];
$chemin_doc = $_SERVER["DOCUMENT_ROOT"]."/uploads/tmp/documents/user/".$user->getId()."/documents/".$param_valeur['tokenDocument'];
if (is_dir($chemin_pic) || is_dir($chemin_doc)) {
$repoArticle = $this->entityManager->getRepository(Article::class);
if ( ! is_array($liste_resultats)) {
$liste_resultats = $this->rechercheArticleChaine($param_recherche, "rechercher");
}
$articles = $liste_resultats["resultats"];
$nbLignes = count($articles);
for ($i = 0; $i < count($articles); $i++) {
$article = $repoArticle->find($articles[$i]["id"]);
if (is_object($article)) {
$this->imageArticleService->sauvegarder($article, 'images', $param_valeur['tokenPicture'], false, $param_valeur['supprimerImgExistant'], $param_valeur['publierImgWeb']);
$this->documentArticleService->sauvegarder(
$article,
'documents',
$param_valeur['tokenDocument'],
false,
$param_valeur['supprimerDocExistant'],
$param_valeur['publierDocWeb']
);
//$imageService->sauvegarder($article,'images',$param_valeur['tokenPicture'],false,false);
}
}
//$nbLignes = 999999;
}
if (array_key_exists('categories', $param_valeur) && count($param_valeur['categories']) > 0) {
$liste_resultats = $this->rechercheArticleChaine($param_recherche, "rechercher");
$articles = $liste_resultats["resultats"];
$nbLignes = count($articles);
///echo "<div>MODIF CATEGORIE</div>";
$parametre_categorie = $param_valeur['categories'];
$sqlCategorie = "DELETE FROM `article__article_categorie` WHERE article_id IN (SELECT * FROM (".$sql_recherche.") AS tmp)";
//echo "<div>sqlCategorie : ".$sqlCategorie."</div>";
$stmt = $conn->prepare($sqlCategorie);
$stmt->executeQuery();
for ($z = 0; $z < count($param_valeur['categories']); $z++) {
for ($i = 0; $i < count($articles); $i++) {
//echo "<div>TITITI ".count($param_valeur['categories'])."</div>";
$reqInsert = "INSERT INTO `article__article_categorie` (article_id,categorie_id) VALUES ('".$articles[$i]["id"]."','".$param_valeur["categories"][$z]."')";
$stmt = $conn->prepare($reqInsert);
$stmt->executeQuery();
//echo "<div>ARTICLE : ".$articles[$i]["reference"]." ==> ".$reqInsert."</div>";
}
}
}
//$nbLignes = 0;
return $nbLignes;
//return $tabRetour;
}
public function construireWhereMajEnChaine($param = [])
{
$where = "";
$select = "SELECT id FROM `article__article` as x ";
$retour = [];
if (array_key_exists('marque', $param) && $param['marque'] != "") {
if ($where == "") {
$where .= " WHERE";
} else {
$where .= " AND";
}
$where .= " marque_id = '".$param['marque']."'";
}
if (array_key_exists('sous_categorie_article_sel', $param) && $param['sous_categorie_article_sel'] != "") {
if ($where == "") {
$where .= " WHERE";
} else {
$where .= " AND";
}
$where .= " x.id IN (SELECT article_id FROM `article__article_categorie` WHERE `categorie_id` = ".$param['sous_categorie_article_sel'].")";
} elseif (array_key_exists('categorie_article_sel', $param) && $param['categorie_article_sel'] != "") {
if ($where == "") {
$where .= " WHERE";
} else {
$where .= " AND";
}
$where .= " x.id IN (SELECT article_id FROM `article__article_categorie` WHERE `categorie_id` = ".$param['categorie_article_sel'].")";
}
$select .= $where;
$retour["where"] = $where;
$retour["select"] = $select;
return $retour;
}
public function majEnChaine($param = [])
{
//print_r($param);
$param['valeur'] = floatval($param['valeur']);
$countUpdated = "";
$sql = "";
$conn = $this->entityManager->getConnection();
$selection = $this->construireWhereMajEnChaine($param);
if (array_key_exists('champ', $param) && array_key_exists('valeur', $param)) {
if ($param["champ"] == "largeur" || $param["champ"] == "hauteur" || $param["champ"] == "profondeur" || $param["champ"] == "poids") {
$sql = "UPDATE `article__article` as x SET ".$param["champ"]."='".$param['valeur']."'".$selection["where"];
} elseif ($param["champ"] == "type") {
$sql = "UPDATE `article__article` as x SET type_id='".$param['typeArticle']."'".$selection["where"];
} elseif ($param["champ"] == "compta") {
$sql = "UPDATE `article__article` as x SET famille_compta_id='".$param['familleComptaArticle']."'".$selection["where"];
} elseif ($param["champ"] == "image") {
$stmt = $conn->prepare($selection["select"]);
$results = $stmt->executeQuery()->fetchAllAssociative();
$repoArticle = $this->entityManager->getRepository(Article::class);
for ($i = 0; $i < count($results); $i++) {
$article = $repoArticle->find($results[$i]["id"]);
if (is_object($article)) {
$this->imageArticleService->sauvegarder($article, 'images', $param['tokenPicture'], false, $param['supprimerImgExistant']);
}
}
} elseif ($param["champ"] == "document") {
$stmt = $conn->prepare($selection["select"]);
$results = $stmt->executeQuery()->fetchAllAssociative();
$repoArticle = $this->entityManager->getRepository(Article::class);
for ($i = 0; $i < count($results); $i++) {
$article = $repoArticle->find($results[$i]["id"]);
if (is_object($article)) {
$this->documentArticleService->sauvegarder($article, 'documents', $param['tokenDocument'], false, $param['supprimerDocExistant']);
}
}
} elseif ($param["champ"] == "categorie") {
$stmt = $conn->prepare($selection["select"]);
$results = $stmt->executeQuery()->fetchAllAssociative();
$repoArticle = $this->entityManager->getRepository(Article::class);
for ($i = 0; $i < count($results); $i++) {
$article = $repoArticle->find($results[$i]["id"]);
if (is_object($article)) {
if ($param["supprimerCategorieExistant"]) {
$sqlCategorie = "DELETE FROM `article__article_categorie` WHERE article_id = '".$article->getId()."'";
$stmt = $conn->prepare($sqlCategorie);
$stmt->executeQuery();
}
for ($z = 0; $z < count($param["categories"]); $z++) {
$reqExiste = "SELECT count(*) as total FROM `article__article_categorie` WHERE categorie_id = '".$param["categories"][$z]."' AND article_id = '".$article->getId(
)."'";
$stmt = $conn->prepare($reqExiste);
$resultsExiste = $stmt->executeQuery()->fetchAllAssociative();
if ($resultsExiste[0]["total"] == 0) {
$reqInsert = "INSERT INTO `article__article_categorie` (article_id,categorie_id) VALUES ('".$article->getId()."','".$param["categories"][$z]."')";
$stmt = $conn->prepare($reqInsert);
$stmt->executeQuery();
}
}
}
}
} elseif ($param["champ"] == "coefficient") {
$stmt = $conn->prepare($selection["select"]);
$results = $stmt->executeQuery()->fetchAllAssociative();
$repoArticle = $this->entityManager->getRepository(Article::class);
for ($i = 0; $i < count($results); $i++) {
$article = $repoArticle->find($results[$i]["id"]);
if (is_object($article)) {
if ($article->getPrixBase() > 0) {
$prix_vente = round($article->getPrixBase() * $param['valeur'], 2);
$tauxMarge = round(($prix_vente - $article->getPrixBase()) * 100 / $prix_vente, 2);
$marge = $prix_vente - $article->getPrixBase();
$margeReelle = round($prix_vente - $article->getCpump(), 2);
$reqUpdate = "UPDATE `article__article` as x SET
`coefficient_px_base_px_vente` = '".$param['valeur']."',
`prix_vente` = '".$prix_vente."',
`taux_marge` = '".$tauxMarge."',
`marge` = '".$marge."',
`marge_reelle` = '".$margeReelle."'
WHERE
`id` = '".$article->getId()."'
";
$stmt = $conn->prepare($reqUpdate);
$stmt->executeQuery();
//if($article->getId() == "1005888") echo "<div>".$reqUpdate."</div>";
}
}
}
}
}
if ($sql != "") {
$stmt = $conn->prepare($sql);
$countUpdated = $stmt->executeQuery()->rowCount();
}
//echo "<div>SQL ".$selection["select"]."</div>";
//echo "<div>".$sql." <br/><br/>(".$countUpdated.")\n\n</div>";
return $countUpdated;
}
public function besoin(Article $article)
{
$dispo = $article->getStock() - $article->getStockReserve() + $article->getRalFournisseur();
if ($dispo >= 0) {
return '';
}
return abs($dispo);
}
public function conso(Article $article, $nbMois = 0, $nbMoisDecalage = 0)
{
$repo_mvt_stock = $this->entityManager->getRepository(MouvementStock::class);
$conso = $repo_mvt_stock->getQteVenduSurPeriode($article, $nbMois, $nbMoisDecalage);
return $conso;
}
public function conditionnement(Article $article, Fournisseur $fournisseur)
{
$repo_condition_achat = $this->entityManager->getRepository(ConditionAchat::class);
$conditionnement = 0;
$conditionAchat = $repo_condition_achat->findOneBy([
'article' => $article->getId(),
'fournisseur' => $fournisseur->getId(),
]);
if (is_object($conditionAchat)) {
$conditionnement = $conditionAchat->getConditionnement();
}
return $conditionnement;
}
public function getTotalEnfants(Article $article)
{
$repo_article = $this->entityManager->getRepository(Article::class);
$articles = $repo_article->findByParent($article);
return count($articles);
}
public function articleCommandeSupprimableCommande(ArticleCommande $ac)
{
$repo_article = $this->entityManager->getRepository(Article::class);
return $repo_article->articleCommandeSupprimableCommande($ac);
}
public function getRaf($article)
{
$repo = $this->entityManager->getRepository(Fabrication::class);
return $repo->getRaf($article);
}
public function derniereEntreeStock($id_article, $param = [])
{
$repo_commande = $this->entityManager->getRepository(Commande::class);
$dernier_entree = $repo_commande->derniereEntreeStock($id_article, $param);
return $dernier_entree;
}
public function derniereSortieStock($id_article, $param)
{
$repo_commande = $this->entityManager->getRepository(Commande::class);
$dernier_sortie = $repo_commande->derniereSortieStock($id_article, $param);
return $dernier_sortie;
}
public function getCategorieNiveauUn($id_article)
{
$repo_categorie = $this->entityManager->getRepository(Categorie::class);
$categories = $repo_categorie->getCategorieNiveauUn($id_article);
return $categories;
}
public function getRalClientEtCmdAssociees(Article $article)
{
$repoArticleCommande = $this->entityManager->getRepository(ArticleCommande::class);
$reservations = $repoArticleCommande->getRalClientEtCmdAssociees($article);
//echo "AAAA ".$article->getReference();
return $reservations;
}
public function getRalFournisseur(Article $article, $negatif = false)
{
$repo_article_commande = $this->entityManager->getRepository(ArticleCommande::class);
$ralFournisseur = $repo_article_commande->getRalFournisseur($article->getId(), $negatif);
return $ralFournisseur;
}
public function quantiteAfabriquer(Article $article)
{
$dispo = $article->getStock() - $article->getStockReserve();
$seuil = 0;
if ($article->getSeuilMiniCommandeFournisseur() > 0) {
$seuil = $article->getSeuilMiniCommandeFournisseur();
}
if ($article->getSeuilMaxiCommandeFournisseur() > 0) {
$seuil = $article->getSeuilMaxiCommandeFournisseur();
}
$raf = $this->getRaf($article);
$quantite = $seuil - $dispo - $raf;
if ($quantite <= 0) {
$quantite = 1;
}
$repo_condha = $this->entityManager->getRepository(ConditionAchat::class);
$condHa = $repo_condha->findOneBy(["defaut" => "1", "fournisseur" => 132, "article" => $article]);
if (is_object($condHa)) {
$qteCondHa = $condHa->getQuantite();
if ($qteCondHa > $quantite) {
$quantite = $qteCondHa;
}
}
return $quantite;
}
public function articleAfabriquer(Article $article)
{
$raf = $this->getRaf($article);
$dispo = $article->getStock() - $article->getStockReserve() + $raf;
//return $dispo;
if ($dispo < 0) {
return 1;
}
if ($article->getSeuilMiniCommandeFournisseur() > 0) {
$seuil = $article->getSeuilMiniCommandeFournisseur();
$quantite = $seuil - $dispo;
if ($dispo < $seuil) {
return 1;
}
}
return 0;
}
public function getArticlesAfabriquerSeuilMini()
{
$articles = [];
$articlesInternesAFabriquer = $this->entityManager->getRepository(Article::class)->getArticlesAfabriquerSeuilMini();
foreach ($articlesInternesAFabriquer as $articleInternesAFabriquer) {
$raf = $this->getRaf($articleInternesAFabriquer);
$dispo = $articleInternesAFabriquer->getStock() - $articleInternesAFabriquer->getStockReserve() + $raf;
if ($articleInternesAFabriquer->getSeuilMiniCommandeFournisseur() > 0) {
$seuil = $articleInternesAFabriquer->getSeuilMiniCommandeFournisseur();
if ($dispo < $seuil) {
if ($articleInternesAFabriquer->getSeuilMaxiCommandeFournisseur() > 0) {
$seuil = $articleInternesAFabriquer->getSeuilMaxiCommandeFournisseur();
}
$articleTmp = [
'article' => $articleInternesAFabriquer,
'quantite' => $seuil - $dispo,
];
$articles[] = $articleTmp;
}
}
}
return $articles;
}
public function dispo(Article $article)
{
$dispo = $article->getStock() - $article->getStockReserve();
if ($dispo < 0) {
$dispo = 0;
}
return $dispo;
}
public function estReservable(Article $article)
{
if ($article->getMainOeuvre() == 1) {
return false;
}
return true;
}
public function getPumpR(Article $article)
{
return $this->entityManager->getRepository(Article::class)->getPumpR($article->getId());
}
public function getPumpC(Article $article)
{
return $this->entityManager->getRepository(Article::class)->getPumpC($article->getId());
}
public function getPumpComposeVirtuel($id, $date_debut = "", $date_fin = "", $type = "")
{
$article = $this->entityManager->getRepository(Article::class)->find($id);
$repo_condha = $this->entityManager->getRepository(ConditionAchat::class);
$repo_mouvement = $this->entityManager->getRepository(MouvementStock::class);
$somme_pump = 0;
//echo "<div>TYPE : ".$type."</div>";
if (is_object($article) && $article->getVirtuel() == true && $article->getProduitInterne() == true) {
$composants = $article->getArticlesComposants();
$nb_composants = count($composants);
if (count($composants) > 0) {
foreach ($composants as $c) {
$sql = "
SELECT
AVG(ac.cpump) as pump_avg
FROM `article__mouvement_stock` as ac
LEFT JOIN article__article as ar on ar.id = ac.article_id
WHERE
ac.cpump is not null and ac.cpump != 0
AND
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')."'
AND ar.id = ".$c->getArticle()->getId()."
";
//echo "<div>SQL ".$sql."</div>";
$stmt = $this->entityManager->getConnection()->prepare($sql);
$retour = $stmt->executeQuery()->fetchAllAssociative();
//print_r($retour);
//if($c->getArticle()->getPump() > 0) {
if ($retour[0]["pump_avg"] > 0) {
//echo "<div>OK ".$retour[0]["pump_avg"]."</div>";
$somme_pump = $somme_pump + $retour[0]["pump_avg"];
} else {
$condHa = $repo_condha->findOneBy(["article" => $c->getArticle(), "defaut" => 1]);
if (is_object($condHa)) {
$prix = $condHa->getPrixAchatNet();
if ($condHa->getCoefficientConditionnement() != 0) {
$prix = $prix / $condHa->getCoefficientConditionnement();
}
$tauxChange = 1;
$fournisseur = $condHa->getFournisseur();
if (is_object($fournisseur)) {
$devise = $fournisseur->getDevise();
}
if (is_object($devise) && $devise->getTauxChange() != 0) {
$tauxChange = $devise->getTauxChange();
}
$prix = $prix * $tauxChange; //prix d'achat brut converti en euros
$somme_pump = $somme_pump + $prix;
}
}
}
}
} elseif (is_object($article)) {
$compteur_mouvement = 0;
if ($type == "bl") {
$sql = "
SELECT
ac.id,
ac.date_mouvement,
ac.stock as stock,
ac.cpump as cpump
FROM `article__mouvement_stock` as ac
LEFT JOIN commerciale__commande as c on ac.commande_id = c.id
LEFT JOIN commerciale__commande as f on c.facture_id = f.id
LEFT JOIN client__client as u on u.id = c.client_id
LEFT JOIN article__article as ar on ar.id = ac.article_id
WHERE
ac.article_id = ".$id."
AND
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')."'
AND
(
( (c.type_document_commercial_id = ".TypeDocumentCommercial::BL." AND c.statut_commande_id != 25))
)
AND (c.facture_id is NULL or f.statut_commande_id = 23)
";
//echo "<div>SQL BL ".$sql."</div>";
} else {
$sql = "
SELECT
ac.id,
ac.date_mouvement,
ac.stock as stock,
ac.cpump as cpump
FROM `article__mouvement_stock` as ac
LEFT JOIN commerciale__commande as c on ac.commande_id = c.id
LEFT JOIN commerciale__commande as f on c.facture_id = f.id
LEFT JOIN client__client as u on u.id = c.client_id
LEFT JOIN article__article as ar on ar.id = ac.article_id
WHERE
ac.article_id = ".$id."
AND
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')."'
AND
(
( (c.type_document_commercial_id = ".TypeDocumentCommercial::BL." AND c.statut_commande_id != 25 AND (c.facture_id is NOT NULL and f.statut_commande_id != 23))
OR
((c.type_document_commercial_id = ".TypeDocumentCommercial::FACTURE." AND c.statut_commande_id != 23) )
OR
(c.type_document_commercial_id = ".TypeDocumentCommercial::AVOIR." AND c.statut_commande_id != 19))
)
";
//echo "<div>SQL NORMAL ".$sql."</div>";
/*
$sql = "
SELECT
ac.stock as stock,
ac.pump as pump
FROM `article__mouvement_stock` as ac
LEFT JOIN article__article as ar on ar.id = ac.article_id
WHERE
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')."'
AND ar.id = ".$article->getId()."
";
*/
}
//echo "<div>SQL ".$sql."</div>";
$stmt = $this->entityManager->getConnection()->prepare($sql);
$retour = $stmt->executeQuery()->fetchAllAssociative();
if (count($retour) > 0) {
for ($i = 0; $i < count($retour); $i++) {
if ($retour[$i]["stock"] <= 0 or $retour[$i]["cpump"] <= 0) {
//echo "<div>PUMP PAS OK</div>";
$condHa = $repo_condha->findOneBy(["article" => $article, "defaut" => 1]);
if (is_object($condHa)) {
//echo "<div>CONDHA OK</div>";
$prix = $condHa->getPrixAchatNet();
if ($condHa->getCoefficientConditionnement() != 0) {
$prix = $prix / $condHa->getCoefficientConditionnement();
}
$tauxChange = 1;
$fournisseur = $condHa->getFournisseur();
if (is_object($fournisseur)) {
$devise = $fournisseur->getDevise();
}
if (is_object($devise) && $devise->getTauxChange() != 0) {
$tauxChange = $devise->getTauxChange();
}
$prix = $prix * $tauxChange; //prix d'achat brut converti en euros
$compteur_mouvement++;
//echo "<div>PRIX ".$prix."</div>";
$somme_pump = $somme_pump + $prix;
} else {
$condHa = $repo_condha->findOneBy(["article" => $article]);
if (is_object($condHa)) {
//echo "<div>CONDHA OK</div>";
$prix = $condHa->getPrixAchatNet();
if ($condHa->getCoefficientConditionnement() != 0) {
$prix = $prix / $condHa->getCoefficientConditionnement();
}
$tauxChange = 1;
$fournisseur = $condHa->getFournisseur();
if (is_object($fournisseur)) {
$devise = $fournisseur->getDevise();
}
if (is_object($devise) && $devise->getTauxChange() != 0) {
$tauxChange = $devise->getTauxChange();
}
$prix = $prix * $tauxChange; //prix d'achat brut converti en euros
$compteur_mouvement++;
//echo "<div>PRIX ".$prix."</div>";
$somme_pump = $somme_pump + $prix;
}
}
} else {
//echo "<div>PUMP OK</div>";
$compteur_mouvement++;
$somme_pump = $somme_pump + $retour[0]["cpump"];
}
}
}
//echo "<div>SOMME PUMP ".$somme_pump."</div>";
//echo "<div>COMPTEUR MOUVEMNET ".$compteur_mouvement."</div>";
if ($compteur_mouvement > 0) {
$somme_pump = $somme_pump / $compteur_mouvement;
}
//echo "<div>MOYENNE PUMP ".$somme_pump."</div>";
}
return $somme_pump;
}
public function getStatsArticle($id, $date_debut = "", $date_fin = "", $integreBl = false, $parametres = [])
{
//print_r($parametres);
$article = $this->entityManager->getRepository(Article::class)->find($id);
$repo_condha = $this->entityManager->getRepository(ConditionAchat::class);
$repo_mouvement = $this->entityManager->getRepository(MouvementStock::class);
$valeurs = [];
$valeurs["reference"] = $article->getReference();
$valeurs["libelle"] = $article->getLibelle();
$valeurs["quantite"] = "";
$valeurs["ca"] = "";
$valeurs["bl"] = "";
$valeurs["marge"] = "";
$valeurs["margePourcent"] = "";
$somme_marge = 0;
$somme_ca = 0;
$somme_bl = 0;
$somme_qte = 0;
$join_table_client = false;
$join = "";
$where = "";
if (array_key_exists('client', $parametres) and $parametres["client"] != "" and $parametres["client"] > 0) {
//if(!$join_table_client) $join .= " LEFT JOIN client__client as clt on c.client_id = clt.id";
$where .= " AND u.id = '".$parametres["client"]."'";
//$join_table_client = true;
}
if (array_key_exists('categorie_client', $parametres) and $parametres["categorie_client"] > 0) {
//if(!$join_table_client) $join .= " LEFT JOIN client__client as clt on c.client_id = clt.id";
$join .= " LEFT JOIN client__client_categorie as cltcat on cltcat.client_id = u.id";
if (array_key_exists('sous_categorie_client', $parametres) and $parametres["sous_categorie_client"] > 0) {
$where .= " AND (cltcat.categorie_id = '".$parametres["sous_categorie_client"]."' and cltcat.dateSuppression is null)";
} else {
$where .= " AND (cltcat.categorie_id = '".$parametres["categorie_client"]."' and cltcat.dateSuppression is null)";
}
//echo "OK";
}
//echo "<div>TYPE : ".$type."</div>";
$inArticle = $id;
$jointureCommande = "ac.commande_id";
if (is_object($article)) {
//echo "test";
if (is_object($article) && $article->getVirtuel() == true && $article->getProduitInterne() == true and 1 != 1) {
//echo "<div>COMPOSE</div>";
$composants = $article->getArticlesComposants();
$nb_composants = count($composants);
if (count($composants) > 0) {
$tabPumCompose = [];
$tabArticleComposants = [];
$inArticle .= ",";
$jointureCommande = "ac.commande_id";
foreach ($composants as $c) {
$inArticle .= $c->getArticle()->getId().",";
}
$inArticle = trim($inArticle, ",");
if ($integreBl) {
//POUR LES BL
$sql = "
SELECT
ac.prix_achat,
ac.quantite,
ac.id,
ac.date_mouvement,
ac.stock as stock,
ac.cpump as cpump,
ac.article_id as articleId
FROM `article__mouvement_stock` as ac
LEFT JOIN commerciale__commande as c on ac.commande_id = c.id
LEFT JOIN commerciale__commande as cvirt on ac.commande_virtuel_id = cvirt.id
LEFT JOIN commerciale__commande as f on c.facture_id = f.id
LEFT JOIN commerciale__commande as fvirt on cvirt.facture_id = fvirt.id
LEFT JOIN client__client as u on u.id = c.client_id
LEFT JOIN article__article as ar on ar.id = ac.article_id
".$join."
WHERE
ac.article_id IN (".$inArticle.")
AND
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')."'
AND
(
(
(c.type_document_commercial_id = ".TypeDocumentCommercial::BL." AND c.statut_commande_id != 25)
OR
(cvirt.type_document_commercial_id = ".TypeDocumentCommercial::BL." AND cvirt.statut_commande_id != 25 and ac.commande_virtuel_id is not null)
)
)
AND
(
(c.facture_id is NULL or f.statut_commande_id = 23)
OR
((cvirt.facture_id is NULL or fvirt.statut_commande_id = 23) and ac.commande_virtuel_id is not null)
)
".$where."
";
//echo $sql;
$stmt = $this->entityManager->getConnection()->prepare($sql);
$retour = $stmt->executeQuery()->fetchAllAssociative();
if (count($retour) > 0) {
$quantite_vente = 0;
$prix_vente = 0;
$cpump_compose = 0;
for ($i = 0; $i < count($retour); $i++) {
//echo "<div><br/>AAAA ===> ".$retour[$i]["articleId"]."</div>";
if ($retour[$i]["articleId"] == $id) {
// echo "<div>RRRRR ===> ".$retour[$i]["articleId"]."</div>";
$quantite_vente += $retour[$i]["quantite"];
$prix_vente = $retour[$i]["prix_achat"];
$prix_vente = $retour[$i]["cpump"];
$somme_qte += $retour[$i]["quantite"];
$somme_bl += $retour[$i]["quantite"] * $retour[$i]["prix_achat"];
} elseif (1 != 1) {
//echo "<div>WWWW ===> ".$retour[$i]["articleId"]."</div>";
if ($retour[$i]["stock"] <= 0 or $retour[$i]["cpump"] <= 0) {
//echo "<div>PUMP PAS OK</div>";
$condHa = $repo_condha->findOneBy(["article" => $retour[$i]["articleId"], "defaut" => 1]);
if (is_object($condHa)) {
//echo "<div>CONDHA OK</div>";
$prix = $condHa->getPrixAchatNet();
if ($condHa->getCoefficientConditionnement() != 0) {
$prix = $prix / $condHa->getCoefficientConditionnement();
}
$tauxChange = 1;
$fournisseur = $condHa->getFournisseur();
if (is_object($fournisseur)) {
$devise = $fournisseur->getDevise();
}
if (is_object($devise) && $devise->getTauxChange() != 0) {
$tauxChange = $devise->getTauxChange();
}
$prix = $prix * $tauxChange; //prix d'achat brut converti en euros
$cpump_compose = $prix;
//echo "<div>PRIX CHA: ".$prix."</div>";
} else {
$condHa = $repo_condha->findOneBy(["article" => $retour[$i]["articleId"]]);
if (is_object($condHa)) {
//echo "<div>CONDHA PAS OK</div>";
$prix = $condHa->getPrixAchatNet();
if ($condHa->getCoefficientConditionnement() != 0) {
$prix = $prix / $condHa->getCoefficientConditionnement();
}
$tauxChange = 1;
$fournisseur = $condHa->getFournisseur();
if (is_object($fournisseur)) {
$devise = $fournisseur->getDevise();
}
if (is_object($devise) && $devise->getTauxChange() != 0) {
$tauxChange = $devise->getTauxChange();
}
$prix = $prix * $tauxChange; //prix d'achat brut converti en euros
$cpump_compose = $prix;
}
}
} else {
//echo "<div>PUMP OK</div>";
$cpump_compose = $retour[0]["cpump"];
}
if (array_key_exists($retour[$i]["articleId"], $tabPumCompose)) {
$tabPumCompose[$retour[$i]["articleId"]]["quantite"] += $retour[$i]["quantite"];
$tabPumCompose[$retour[$i]["articleId"]]["cump"] += $cpump_compose * $retour[$i]["quantite"];
} else {
$tabPumCompose[$retour[$i]["articleId"]] = ["quantite" => $retour[$i]["quantite"], "cump" => $cpump_compose * $retour[$i]["quantite"]];
}
}
}
$cpump_compose = 0;
if (count($tabPumCompose) > 0) {
foreach ($tabPumCompose as $key => $value) {
if ($value["quantite"] != 0) {
$cpump_compose += $value["cump"] / $value["quantite"];
}
}
}
//print_r($tabPumCompose);
$marge_tmp = ($quantite_vente * $prix_vente) - ($quantite_vente * $cpump_compose);
$somme_marge += $marge_tmp;
//echo "<div>X Q(".$quantite_vente.")</div>";
//echo "<div>X PV(".$prix_vente.")</div>";
//echo "<div>X PUMP(".$cpump_compose.")</div><br/><br/>";
}
}
//echo "<div>SOMME BL ".$somme_bl."</div>";
//print_r($tabPumCompose);
$sql = "
SELECT
ac.id,
ac.prix_achat,
ac.date_mouvement,
ac.stock as stock,
ac.quantite,
ac.cpump as cpump,
ac.article_id as articleId
FROM `article__mouvement_stock` as ac
LEFT JOIN commerciale__commande as c on ac.commande_id = c.id
LEFT JOIN commerciale__commande as cvirt on ac.commande_virtuel_id = cvirt.id
LEFT JOIN commerciale__commande as f on c.facture_id = f.id
LEFT JOIN commerciale__commande as fvirt on cvirt.facture_id = fvirt.id
LEFT JOIN client__client as u on u.id = c.client_id
LEFT JOIN article__article as ar on ar.id = ac.article_id
".$join."
WHERE
ac.article_id IN (".$inArticle.")
AND
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')."'
AND
(
(
(
(c.type_document_commercial_id = ".TypeDocumentCommercial::BL." AND c.statut_commande_id != 25 AND (c.facture_id is NOT NULL and f.statut_commande_id != 23))
OR
(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)
)
OR
(
(c.type_document_commercial_id = ".TypeDocumentCommercial::FACTURE." AND c.statut_commande_id != 23)
OR
(cvirt.type_document_commercial_id = ".TypeDocumentCommercial::FACTURE." AND cvirt.statut_commande_id != 23 and ac.commande_virtuel_id is not null)
)
OR
(
(c.type_document_commercial_id = ".TypeDocumentCommercial::AVOIR." AND c.statut_commande_id != 19)
OR
(cvirt.type_document_commercial_id = ".TypeDocumentCommercial::AVOIR." AND cvirt.statut_commande_id != 19 and ac.commande_virtuel_id is not null)
)
)
)
".$where."
";
//echo $sql."<br/><hr/>";
$stmt = $this->entityManager->getConnection()->prepare($sql);
$retour = $stmt->executeQuery()->fetchAllAssociative();
if (count($retour) > 0) {
$quantite_vente = 0;
$prix_vente = 0;
$cpump_compose = 0;
$total_cout = 0;
for ($i = 0; $i < count($retour); $i++) {
if ($retour[$i]["articleId"] == $id) {
//echo "<div>AAA</div>";
$quantite_vente += $retour[$i]["quantite"];
$prix_vente = $retour[$i]["prix_achat"];
$prix_vente = $retour[$i]["cpump"];
$somme_qte += $retour[$i]["quantite"];
$somme_ca += $retour[$i]["quantite"] * $retour[$i]["prix_achat"];
$total_cout += $retour[$i]["quantite"] * $retour[$i]["cpump"];
//echo "<div>QQ ".$retour[$i]["quantite"]." CUMP ".$retour[$i]["cpump"]." TOTAL ".$total_cout."</div>";
} elseif (1 != 1) {
//echo "<div>BBB</div>";
if ($retour[$i]["stock"] <= 0 or $retour[$i]["cpump"] <= 0) {
//echo "<div>PUMP PAS OK</div>";
$condHa = $repo_condha->findOneBy(["article" => $retour[$i]["articleId"], "defaut" => 1]);
if (is_object($condHa)) {
$prix = $condHa->getPrixAchatNet();
if ($condHa->getCoefficientConditionnement() != 0) {
$prix = $prix / $condHa->getCoefficientConditionnement();
}
$tauxChange = 1;
$fournisseur = $condHa->getFournisseur();
if (is_object($fournisseur)) {
$devise = $fournisseur->getDevise();
}
if (is_object($devise) && $devise->getTauxChange() != 0) {
$tauxChange = $devise->getTauxChange();
}
$prix = $prix * $tauxChange; //prix d'achat brut converti en euros
$cpump_compose = $prix;
} else {
$condHa = $repo_condha->findOneBy(["article" => $retour[$i]["articleId"]]);
if (is_object($condHa)) {
//echo "<div>CONDHA OK</div>";
$prix = $condHa->getPrixAchatNet();
if ($condHa->getCoefficientConditionnement() != 0) {
$prix = $prix / $condHa->getCoefficientConditionnement();
}
$tauxChange = 1;
$fournisseur = $condHa->getFournisseur();
if (is_object($fournisseur)) {
$devise = $fournisseur->getDevise();
}
if (is_object($devise) && $devise->getTauxChange() != 0) {
$tauxChange = $devise->getTauxChange();
}
$prix = $prix * $tauxChange; //prix d'achat brut converti en euros
$cpump_compose = $prix;
}
}
} else {
//echo "<div>PUMP OK</div>";
$cpump_compose = $retour[0]["cpump"];
}
if (array_key_exists($retour[$i]["articleId"], $tabPumCompose)) {
$tabPumCompose[$retour[$i]["articleId"]]["quantite"] += 1;
$tabPumCompose[$retour[$i]["articleId"]]["cump"] += $cpump_compose;
} else {
$tabPumCompose[$retour[$i]["articleId"]] = ["quantite" => 1, "cump" => $cpump_compose];
}
}
}
$cpump_compose = 0;
if (count($tabPumCompose) > 0) {
foreach ($tabPumCompose as $key => $value) {
if ($value["quantite"] != 0) {
$cpump_compose += $value["cump"] / $value["quantite"];
}
}
}
//print_r($tabPumCompose);
$marge_tmp = ($quantite_vente * $prix_vente) - ($quantite_vente * $cpump_compose);
$somme_marge += $marge_tmp;
//echo "<div>Z Q(".$quantite_vente.")</div>";
//echo "<div>Z PV(".$prix_vente.")</div>";
//echo "<div>Z PUMP(".$cpump_compose.")</div><br/><br/>";
//echo "<div>somme_marge(".$somme_marge.")</div><br/><br/>";
//echo "<div>total_cout(".$total_cout.")</div><br/><br/>";
}
}
} else {
if ($integreBl) {
//POUR LES BL
$sql = "
SELECT
ac.prix_achat,
ac.quantite,
ac.id,
ac.date_mouvement,
ac.stock as stock,
ac.cpump as cpump
FROM `article__mouvement_stock` as ac
LEFT JOIN commerciale__commande as c on ".$jointureCommande." = c.id
LEFT JOIN commerciale__commande as f on c.facture_id = f.id
LEFT JOIN client__client as u on u.id = c.client_id
LEFT JOIN article__article as ar on ar.id = ac.article_id
".$join."
WHERE
ac.article_id IN (".$inArticle.")
AND
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')."'
AND
(
( (c.type_document_commercial_id = ".TypeDocumentCommercial::BL." AND c.statut_commande_id != 25))
)
AND (c.facture_id is NULL or f.statut_commande_id = 23)
".$where."
";
//echo "<div>SQL BL ".$sql."</div>";
$stmt = $this->entityManager->getConnection()->prepare($sql);
$retour = $stmt->executeQuery()->fetchAllAssociative();
if (count($retour) > 0) {
for ($i = 0; $i < count($retour); $i++) {
//if($retour[$i]["stock"]<=0 or $retour[$i]["cpump"] <=0) {
if ($retour[$i]["cpump"] <= 0) {
//echo "<div>PUMP PAS OK</div>";
$condHa = $repo_condha->findOneBy(["article" => $article, "defaut" => 1]);
if (is_object($condHa)) {
//echo "<div>CONDHA OK</div>";
$prix = $condHa->getPrixAchatNet();
if ($condHa->getCoefficientConditionnement() != 0) {
$prix = $prix / $condHa->getCoefficientConditionnement();
}
$tauxChange = 1;
$fournisseur = $condHa->getFournisseur();
if (is_object($fournisseur)) {
$devise = $fournisseur->getDevise();
}
if (is_object($devise) && $devise->getTauxChange() != 0) {
$tauxChange = $devise->getTauxChange();
}
$prix = $prix * $tauxChange; //prix d'achat brut converti en euros
$marge_tmp = ($retour[$i]["quantite"] * $retour[$i]["prix_achat"]) - ($retour[$i]["quantite"] * $prix);
$somme_marge += $marge_tmp;
} else {
$condHa = $repo_condha->findOneBy(["article" => $article]);
if (is_object($condHa)) {
//echo "<div>CONDHA OK</div>";
$prix = $condHa->getPrixAchatNet();
if ($condHa->getCoefficientConditionnement() != 0) {
$prix = $prix / $condHa->getCoefficientConditionnement();
}
$tauxChange = 1;
$fournisseur = $condHa->getFournisseur();
if (is_object($fournisseur)) {
$devise = $fournisseur->getDevise();
}
if (is_object($devise) && $devise->getTauxChange() != 0) {
$tauxChange = $devise->getTauxChange();
}
$prix = $prix * $tauxChange; //prix d'achat brut converti en euros
$marge_tmp = ($retour[$i]["quantite"] * $retour[$i]["prix_achat"]) - ($retour[$i]["quantite"] * $prix);
$somme_marge += $marge_tmp;
}
}
} else {
//echo "<div>PUMP OK</div>";
$marge_tmp = ($retour[$i]["quantite"] * $retour[$i]["prix_achat"]) - ($retour[$i]["quantite"] * $retour[0]["cpump"]);
$somme_marge += $marge_tmp;
}
$somme_bl += $retour[$i]["quantite"] * $retour[$i]["prix_achat"];
$somme_qte += $retour[$i]["quantite"];
}
}
}
//$retourBl = $this->calculStatsSql($sql);
$sql = "
SELECT
ac.id,
ac.prix_achat,
ac.date_mouvement,
ac.stock as stock,
ac.quantite,
ac.cpump as cpump
FROM `article__mouvement_stock` as ac
LEFT JOIN commerciale__commande as c on ".$jointureCommande." = c.id
LEFT JOIN commerciale__commande as f on c.facture_id = f.id
LEFT JOIN client__client as u on u.id = c.client_id
LEFT JOIN article__article as ar on ar.id = ac.article_id
".$join."
WHERE
ac.article_id IN (".$inArticle.")
AND
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')."'
AND
(
( (c.type_document_commercial_id = ".TypeDocumentCommercial::BL." AND c.statut_commande_id != 25 AND (c.facture_id is NOT NULL and f.statut_commande_id != 23))
OR
((c.type_document_commercial_id = ".TypeDocumentCommercial::FACTURE." AND c.statut_commande_id != 23) )
OR
(c.type_document_commercial_id = ".TypeDocumentCommercial::AVOIR." AND c.statut_commande_id != 19))
)
".$where."
";
//echo $sql."<br/><br/>";
$stmt = $this->entityManager->getConnection()->prepare($sql);
$retour = $stmt->executeQuery()->fetchAllAssociative();
//echo "<div>TOTAL ".count($retour)."</div>";
if (count($retour) > 0) {
for ($i = 0; $i < count($retour); $i++) {
$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
FROM `article__mouvement_stock` as mv
LEFT JOIN article__raison_mouvement_stock rm on rm.id = mv.raison_mouvement_stock_id
where mv.id_import is null
and mv.date_mouvement <= "'.$retour[$i]["date_mouvement"].'"
and mv.id < CASE WHEN mv.date_mouvement = "'.$retour[$i]["date_mouvement"].'" THEN '.$retour[$i]["id"].' ELSE 1000000000000000000000000000000 END
and mv.article_id = '.$article->getId()."
ORDER BY mv.date_mouvement DESC,id desc
LIMIT 0,1";
//$output->writeln($sql_mvt_prec);
$mouvement_prec = "";
$stmt_mvt_prec = $this->entityManager->getConnection()->executeQuery($sql_mvt_prec);
$mouvement_prec_tab = $stmt_mvt_prec->fetchAllAssociative();
if (count($mouvement_prec_tab) > 0) {
$mouvement_prec = $mouvement_prec_tab[0];
}
if ($retour[$i]["cpump"] <= 0) {
//echo "<div>PUMP PAS OK</div>";
$condHa = $repo_condha->findOneBy(["article" => $article, "defaut" => 1]);
if (is_object($condHa)) {
//echo "<div>CONDHA OK</div>";
$prix = $condHa->getPrixAchatNet();
if ($condHa->getCoefficientConditionnement() != 0) {
$prix = $prix / $condHa->getCoefficientConditionnement();
}
$tauxChange = 1;
$fournisseur = $condHa->getFournisseur();
if (is_object($fournisseur)) {
$devise = $fournisseur->getDevise();
}
if (is_object($devise) && $devise->getTauxChange() != 0) {
$tauxChange = $devise->getTauxChange();
}
$prix = $prix * $tauxChange; //prix d'achat brut converti en euros
$marge_tmp = ($retour[$i]["quantite"] * $retour[$i]["prix_achat"]) - ($retour[$i]["quantite"] * $prix);
$somme_marge += $marge_tmp;
//echo "<div>A quantite ".$retour[$i]["quantite"]."</div>";
//echo "<div>A prix_achat ".$retour[$i]["prix_achat"]."</div>";
//echo "<div>A cpump ".$retour[$i]["cpump"]." ou ==> ".$prix."</div>";
//echo "<div><b>A marge_tmp ".$marge_tmp."</b></div>";
//echo "<div>A somme_marge ".$somme_marge."<br/><br/></div>";
} else {
$condHa = $repo_condha->findOneBy(["article" => $article]);
if (is_object($condHa)) {
//echo "<div>CONDHA OK</div>";
$prix = $condHa->getPrixAchatNet();
if ($condHa->getCoefficientConditionnement() != 0) {
$prix = $prix / $condHa->getCoefficientConditionnement();
}
$tauxChange = 1;
$fournisseur = $condHa->getFournisseur();
if (is_object($fournisseur)) {
$devise = $fournisseur->getDevise();
}
if (is_object($devise) && $devise->getTauxChange() != 0) {
$tauxChange = $devise->getTauxChange();
}
$prix = $prix * $tauxChange; //prix d'achat brut converti en euros
$marge_tmp = ($retour[$i]["quantite"] * $retour[$i]["prix_achat"]) - ($retour[$i]["quantite"] * $prix);
$somme_marge += $marge_tmp;
//echo "<div>B quantite ".$retour[$i]["quantite"]."</div>";
//echo "<div>B prix_achat ".$retour[$i]["prix_achat"]."</div>";
//echo "<div>B cpump ".$retour[$i]["cpump"]." ou ==> ".$prix."</div>";
//echo "<div><b>B marge_tmp ".$marge_tmp."</b></div>";
//echo "<div>B somme_marge ".$somme_marge."<br/><br/></div>";
}
}
} else {
$marge_tmp = "";
//echo "<div>PUMP OK</div>";
if (is_array($mouvement_prec) && array_key_exists('cpump', $mouvement_prec)) {
// echo "OK";
$marge_tmp = ($retour[$i]["quantite"] * $retour[$i]["prix_achat"]) - ($retour[$i]["quantite"] * $mouvement_prec["cpump"]);
} else {
$marge_tmp = ($retour[$i]["quantite"] * $retour[$i]["prix_achat"]) - ($retour[$i]["quantite"] * $retour[$i]["cpump"]);
}
//echo "<div>marge_tmp ".$marge_tmp."</div>";
$somme_marge += $marge_tmp;
//echo "<div>quantite ".$retour[$i]["quantite"]."</div>";
//echo "<div>prix_achat ".$retour[$i]["prix_achat"]."</div>";
//echo "<div>cpump ".$retour[$i]["cpump"]."</div>";
//echo "<div><b>marge_tmp ".$marge_tmp."</b></div>";
//echo "<div>somme_marge ".$somme_marge."<br/><br/></div>";
}
$somme_ca += $retour[$i]["quantite"] * $retour[$i]["prix_achat"];
$somme_qte += $retour[$i]["quantite"];
//echo "<div>somme_qte ".$somme_qte."</div>";
//echo "<div>somme_ca ".$somme_ca."</div>";
//echo "<div>somme_marge ".$somme_marge."</div>";
//echo "<div>--------------------------------------------</div>";
}
}
//echo "<div>inArticle : ".$inArticle."</div>";
}
//$retourCa = $this->calculStatsSql($sql);
//echo "<div>XXXXsomme_marge ".$somme_marge."<br/><br/></div>";
$somme_ca_bl = $somme_ca + $somme_bl;
//echo "<div>CA FINAL ".$somme_ca_bl."</div>";
$margePourcent = "0";
if ($somme_ca_bl > 0) {
$margePourcent = round($somme_marge * 100 / $somme_ca_bl, 2);
}
$valeurs["quantite"] = $somme_qte;
$valeurs["ca"] = $somme_ca;
$valeurs["bl"] = $somme_bl;
$valeurs["marge"] = $somme_marge;
$valeurs["margePourcent"] = $margePourcent;
//print_r($valeurs);
//echo "<br/><br/>";
return $valeurs;
}
}
public function ____getStatsArticle($id, $date_debut = "", $date_fin = "", $integreBl = false)
{
$article = $this->entityManager->getRepository(Article::class)->find($id);
$repo_condha = $this->entityManager->getRepository(ConditionAchat::class);
$repo_mouvement = $this->entityManager->getRepository(MouvementStock::class);
$valeurs = [];
$valeurs["reference"] = $article->getReference();
$valeurs["libelle"] = $article->getLibelle();
$valeurs["quantite"] = "";
$valeurs["ca"] = "";
$valeurs["bl"] = "";
$valeurs["marge"] = "";
$valeurs["margePourcent"] = "";
$somme_marge = 0;
$somme_ca = 0;
$somme_bl = 0;
$somme_qte = 0;
//echo "<div>TYPE : ".$type."</div>";
$inArticle = $id;
$jointureCommande = "ac.commande_id";
if (is_object($article)) {
//echo "test";
if (is_object($article) && $article->getVirtuel() == true && $article->getProduitInterne() == true) {
//echo "<div>COMPOSE</div>";
$composants = $article->getArticlesComposants();
$nb_composants = count($composants);
if (count($composants) > 0) {
$tabPumCompose = [];
$tabArticleComposants = [];
$inArticle .= ",";
$jointureCommande = "ac.commande_id";
foreach ($composants as $c) {
$inArticle .= $c->getArticle()->getId().",";
}
$inArticle = trim($inArticle, ",");
if ($integreBl) {
//POUR LES BL
$sql = "
SELECT
ac.prix_achat,
ac.quantite,
ac.id,
ac.date_mouvement,
ac.stock as stock,
ac.cpump as cpump,
ac.article_id as articleId
FROM `article__mouvement_stock` as ac
LEFT JOIN commerciale__commande as c on ac.commande_id = c.id
LEFT JOIN commerciale__commande as cvirt on ac.commande_virtuel_id = cvirt.id
LEFT JOIN commerciale__commande as f on c.facture_id = f.id
LEFT JOIN commerciale__commande as fvirt on cvirt.facture_id = fvirt.id
LEFT JOIN client__client as u on u.id = c.client_id
LEFT JOIN article__article as ar on ar.id = ac.article_id
WHERE
ac.article_id IN (".$inArticle.")
AND
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')."'
AND
(
(
(c.type_document_commercial_id = ".TypeDocumentCommercial::BL." AND c.statut_commande_id != 25)
OR
(cvirt.type_document_commercial_id = ".TypeDocumentCommercial::BL." AND cvirt.statut_commande_id != 25 and ac.commande_virtuel_id is not null)
)
)
AND
(
(c.facture_id is NULL or f.statut_commande_id = 23)
OR
((cvirt.facture_id is NULL or fvirt.statut_commande_id = 23) and ac.commande_virtuel_id is not null)
)
";
//echo $sql;
$stmt = $this->entityManager->getConnection()->prepare($sql);
$retour = $stmt->executeQuery()->fetchAllAssociative();
if (count($retour) > 0) {
$quantite_vente = 0;
$prix_vente = 0;
$cpump_compose = 0;
for ($i = 0; $i < count($retour); $i++) {
//echo "<div><br/>AAAA ===> ".$retour[$i]["articleId"]."</div>";
if ($retour[$i]["articleId"] == $id) {
// echo "<div>RRRRR ===> ".$retour[$i]["articleId"]."</div>";
$quantite_vente += $retour[$i]["quantite"];
$prix_vente = $retour[$i]["prix_achat"];
$somme_qte += $retour[$i]["quantite"];
$somme_bl += $retour[$i]["quantite"] * $retour[$i]["prix_achat"];
} else {
//echo "<div>WWWW ===> ".$retour[$i]["articleId"]."</div>";
if ($retour[$i]["stock"] <= 0 or $retour[$i]["cpump"] <= 0) {
//echo "<div>PUMP PAS OK</div>";
$condHa = $repo_condha->findOneBy(["article" => $retour[$i]["articleId"], "defaut" => 1]);
if (is_object($condHa)) {
//echo "<div>CONDHA OK</div>";
$prix = $condHa->getPrixAchatNet();
if ($condHa->getCoefficientConditionnement() != 0) {
$prix = $prix / $condHa->getCoefficientConditionnement();
}
$tauxChange = 1;
$fournisseur = $condHa->getFournisseur();
if (is_object($fournisseur)) {
$devise = $fournisseur->getDevise();
}
if (is_object($devise) && $devise->getTauxChange() != 0) {
$tauxChange = $devise->getTauxChange();
}
$prix = $prix * $tauxChange; //prix d'achat brut converti en euros
$cpump_compose = $prix;
//echo "<div>PRIX CHA: ".$prix."</div>";
} else {
$condHa = $repo_condha->findOneBy(["article" => $retour[$i]["articleId"]]);
if (is_object($condHa)) {
//echo "<div>CONDHA PAS OK</div>";
$prix = $condHa->getPrixAchatNet();
if ($condHa->getCoefficientConditionnement() != 0) {
$prix = $prix / $condHa->getCoefficientConditionnement();
}
$tauxChange = 1;
$fournisseur = $condHa->getFournisseur();
if (is_object($fournisseur)) {
$devise = $fournisseur->getDevise();
}
if (is_object($devise) && $devise->getTauxChange() != 0) {
$tauxChange = $devise->getTauxChange();
}
$prix = $prix * $tauxChange; //prix d'achat brut converti en euros
$cpump_compose = $prix;
}
}
} else {
//echo "<div>PUMP OK</div>";
$cpump_compose = $retour[0]["cpump"];
}
if (array_key_exists($retour[$i]["articleId"], $tabPumCompose)) {
$tabPumCompose[$retour[$i]["articleId"]]["quantite"] += $retour[$i]["quantite"];
$tabPumCompose[$retour[$i]["articleId"]]["cump"] += $cpump_compose * $retour[$i]["quantite"];
} else {
$tabPumCompose[$retour[$i]["articleId"]] = ["quantite" => $retour[$i]["quantite"], "cump" => $cpump_compose * $retour[$i]["quantite"]];
}
}
}
$cpump_compose = 0;
if (count($tabPumCompose) > 0) {
foreach ($tabPumCompose as $key => $value) {
if ($value["quantite"] != 0) {
$cpump_compose += $value["cump"] / $value["quantite"];
}
}
}
//print_r($tabPumCompose);
$marge_tmp = ($quantite_vente * $prix_vente) - ($quantite_vente * $cpump_compose);
$somme_marge += $marge_tmp;
//echo "<div>X Q(".$quantite_vente.")</div>";
//echo "<div>X PV(".$prix_vente.")</div>";
//echo "<div>X PUMP(".$cpump_compose.")</div><br/><br/>";
}
}
//echo "<div>SOMME BL ".$somme_bl."</div>";
//print_r($tabPumCompose);
$sql = "
SELECT
ac.id,
ac.prix_achat,
ac.date_mouvement,
ac.stock as stock,
ac.quantite,
ac.cpump as cpump,
ac.article_id as articleId
FROM `article__mouvement_stock` as ac
LEFT JOIN commerciale__commande as c on ac.commande_id = c.id
LEFT JOIN commerciale__commande as cvirt on ac.commande_virtuel_id = cvirt.id
LEFT JOIN commerciale__commande as f on c.facture_id = f.id
LEFT JOIN commerciale__commande as fvirt on cvirt.facture_id = fvirt.id
LEFT JOIN client__client as u on u.id = c.client_id
LEFT JOIN article__article as ar on ar.id = ac.article_id
WHERE
ac.article_id IN (".$inArticle.")
AND
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')."'
AND
(
(
(
(c.type_document_commercial_id = ".TypeDocumentCommercial::BL." AND c.statut_commande_id != 25 AND (c.facture_id is NOT NULL and f.statut_commande_id != 23))
OR
(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)
)
OR
(
(c.type_document_commercial_id = ".TypeDocumentCommercial::FACTURE." AND c.statut_commande_id != 23)
OR
(cvirt.type_document_commercial_id = ".TypeDocumentCommercial::FACTURE." AND cvirt.statut_commande_id != 23 and ac.commande_virtuel_id is not null)
)
OR
(
(c.type_document_commercial_id = ".TypeDocumentCommercial::AVOIR." AND c.statut_commande_id != 19)
OR
(cvirt.type_document_commercial_id = ".TypeDocumentCommercial::AVOIR." AND cvirt.statut_commande_id != 19 and ac.commande_virtuel_id is not null)
)
)
)
";
//echo $sql;
$stmt = $this->entityManager->getConnection()->prepare($sql);
$retour = $stmt->executeQuery()->fetchAllAssociative();
if (count($retour) > 0) {
$quantite_vente = 0;
$prix_vente = 0;
$cpump_compose = 0;
for ($i = 0; $i < count($retour); $i++) {
if ($retour[$i]["articleId"] == $id) {
$quantite_vente += $retour[$i]["quantite"];
$prix_vente = $retour[$i]["prix_achat"];
$somme_qte += $retour[$i]["quantite"];
$somme_ca += $retour[$i]["quantite"] * $retour[$i]["prix_achat"];
} else {
if ($retour[$i]["stock"] <= 0 or $retour[$i]["cpump"] <= 0) {
//echo "<div>PUMP PAS OK</div>";
$condHa = $repo_condha->findOneBy(["article" => $retour[$i]["articleId"], "defaut" => 1]);
if (is_object($condHa)) {
$prix = $condHa->getPrixAchatNet();
if ($condHa->getCoefficientConditionnement() != 0) {
$prix = $prix / $condHa->getCoefficientConditionnement();
}
$tauxChange = 1;
$fournisseur = $condHa->getFournisseur();
if (is_object($fournisseur)) {
$devise = $fournisseur->getDevise();
}
if (is_object($devise) && $devise->getTauxChange() != 0) {
$tauxChange = $devise->getTauxChange();
}
$prix = $prix * $tauxChange; //prix d'achat brut converti en euros
$cpump_compose = $prix;
} else {
$condHa = $repo_condha->findOneBy(["article" => $retour[$i]["articleId"]]);
if (is_object($condHa)) {
//echo "<div>CONDHA OK</div>";
$prix = $condHa->getPrixAchatNet();
if ($condHa->getCoefficientConditionnement() != 0) {
$prix = $prix / $condHa->getCoefficientConditionnement();
}
$tauxChange = 1;
$fournisseur = $condHa->getFournisseur();
if (is_object($fournisseur)) {
$devise = $fournisseur->getDevise();
}
if (is_object($devise) && $devise->getTauxChange() != 0) {
$tauxChange = $devise->getTauxChange();
}
$prix = $prix * $tauxChange; //prix d'achat brut converti en euros
$cpump_compose = $prix;
}
}
} else {
//echo "<div>PUMP OK</div>";
$cpump_compose = $retour[0]["cpump"];
}
if (array_key_exists($retour[$i]["articleId"], $tabPumCompose)) {
$tabPumCompose[$retour[$i]["articleId"]]["quantite"] += 1;
$tabPumCompose[$retour[$i]["articleId"]]["cump"] += $cpump_compose;
} else {
$tabPumCompose[$retour[$i]["articleId"]] = ["quantite" => 1, "cump" => $cpump_compose];
}
}
}
$cpump_compose = 0;
if (count($tabPumCompose) > 0) {
foreach ($tabPumCompose as $key => $value) {
if ($value["quantite"] != 0) {
$cpump_compose += $value["cump"] / $value["quantite"];
}
}
}
//print_r($tabPumCompose);
$marge_tmp = ($quantite_vente * $prix_vente) - ($quantite_vente * $cpump_compose);
$somme_marge += $marge_tmp;
//echo "<div>Z Q(".$quantite_vente.")</div>";
//echo "<div>Z PV(".$prix_vente.")</div>";
//echo "<div>Z PUMP(".$cpump_compose.")</div><br/><br/>";
}
}
} else {
if ($integreBl) {
//POUR LES BL
$sql = "
SELECT
ac.prix_achat,
ac.quantite,
ac.id,
ac.date_mouvement,
ac.stock as stock,
ac.cpump as cpump
FROM `article__mouvement_stock` as ac
LEFT JOIN commerciale__commande as c on ".$jointureCommande." = c.id
LEFT JOIN commerciale__commande as f on c.facture_id = f.id
LEFT JOIN client__client as u on u.id = c.client_id
LEFT JOIN article__article as ar on ar.id = ac.article_id
WHERE
ac.article_id IN (".$inArticle.")
AND
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')."'
AND
(
( (c.type_document_commercial_id = ".TypeDocumentCommercial::BL." AND c.statut_commande_id != 25))
)
AND (c.facture_id is NULL or f.statut_commande_id = 23)
";
//echo "<div>SQL BL ".$sql."</div>";
$stmt = $this->entityManager->getConnection()->prepare($sql);
$retour = $stmt->executeQuery()->fetchAllAssociative();
if (count($retour) > 0) {
for ($i = 0; $i < count($retour); $i++) {
if ($retour[$i]["stock"] <= 0 or $retour[$i]["cpump"] <= 0) {
//echo "<div>PUMP PAS OK</div>";
$condHa = $repo_condha->findOneBy(["article" => $article, "defaut" => 1]);
if (is_object($condHa)) {
//echo "<div>CONDHA OK</div>";
$prix = $condHa->getPrixAchatNet();
if ($condHa->getCoefficientConditionnement() != 0) {
$prix = $prix / $condHa->getCoefficientConditionnement();
}
$tauxChange = 1;
$fournisseur = $condHa->getFournisseur();
if (is_object($fournisseur)) {
$devise = $fournisseur->getDevise();
}
if (is_object($devise) && $devise->getTauxChange() != 0) {
$tauxChange = $devise->getTauxChange();
}
$prix = $prix * $tauxChange; //prix d'achat brut converti en euros
$marge_tmp = ($retour[$i]["quantite"] * $retour[$i]["prix_achat"]) - ($retour[$i]["quantite"] * $prix);
$somme_marge += $marge_tmp;
} else {
$condHa = $repo_condha->findOneBy(["article" => $article]);
if (is_object($condHa)) {
//echo "<div>CONDHA OK</div>";
$prix = $condHa->getPrixAchatNet();
if ($condHa->getCoefficientConditionnement() != 0) {
$prix = $prix / $condHa->getCoefficientConditionnement();
}
$tauxChange = 1;
$fournisseur = $condHa->getFournisseur();
if (is_object($fournisseur)) {
$devise = $fournisseur->getDevise();
}
if (is_object($devise) && $devise->getTauxChange() != 0) {
$tauxChange = $devise->getTauxChange();
}
$prix = $prix * $tauxChange; //prix d'achat brut converti en euros
$marge_tmp = ($retour[$i]["quantite"] * $retour[$i]["prix_achat"]) - ($retour[$i]["quantite"] * $prix);
$somme_marge += $marge_tmp;
}
}
} else {
//echo "<div>PUMP OK</div>";
$marge_tmp = ($retour[$i]["quantite"] * $retour[$i]["prix_achat"]) - ($retour[$i]["quantite"] * $retour[0]["cpump"]);
$somme_marge += $marge_tmp;
}
$somme_bl += $retour[$i]["quantite"] * $retour[$i]["prix_achat"];
$somme_qte += $retour[$i]["quantite"];
}
}
}
//$retourBl = $this->calculStatsSql($sql);
$sql = "
SELECT
ac.id,
ac.prix_achat,
ac.date_mouvement,
ac.stock as stock,
ac.quantite,
ac.cpump as cpump
FROM `article__mouvement_stock` as ac
LEFT JOIN commerciale__commande as c on ".$jointureCommande." = c.id
LEFT JOIN commerciale__commande as f on c.facture_id = f.id
LEFT JOIN client__client as u on u.id = c.client_id
LEFT JOIN article__article as ar on ar.id = ac.article_id
WHERE
ac.article_id IN (".$inArticle.")
AND
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')."'
AND
(
( (c.type_document_commercial_id = ".TypeDocumentCommercial::BL." AND c.statut_commande_id != 25 AND (c.facture_id is NOT NULL and f.statut_commande_id != 23))
OR
((c.type_document_commercial_id = ".TypeDocumentCommercial::FACTURE." AND c.statut_commande_id != 23) )
OR
(c.type_document_commercial_id = ".TypeDocumentCommercial::AVOIR." AND c.statut_commande_id != 19))
)
";
$stmt = $this->entityManager->getConnection()->prepare($sql);
$retour = $stmt->executeQuery()->fetchAllAssociative();
if (count($retour) > 0) {
for ($i = 0; $i < count($retour); $i++) {
if ($retour[$i]["cpump"] <= 0) {
//echo "<div>PUMP PAS OK</div>";
$condHa = $repo_condha->findOneBy(["article" => $article, "defaut" => 1]);
if (is_object($condHa)) {
//echo "<div>CONDHA OK</div>";
$prix = $condHa->getPrixAchatNet();
if ($condHa->getCoefficientConditionnement() != 0) {
$prix = $prix / $condHa->getCoefficientConditionnement();
}
$tauxChange = 1;
$fournisseur = $condHa->getFournisseur();
if (is_object($fournisseur)) {
$devise = $fournisseur->getDevise();
}
if (is_object($devise) && $devise->getTauxChange() != 0) {
$tauxChange = $devise->getTauxChange();
}
$prix = $prix * $tauxChange; //prix d'achat brut converti en euros
$marge_tmp = ($retour[$i]["quantite"] * $retour[$i]["prix_achat"]) - ($retour[$i]["quantite"] * $prix);
$somme_marge += $marge_tmp;
//echo "<div>A quantite ".$retour[$i]["quantite"]."</div>";
//echo "<div>A prix_achat ".$retour[$i]["prix_achat"]."</div>";
//echo "<div>A cpump ".$retour[$i]["cpump"]." ou ==> ".$prix."</div>";
//echo "<div><b>A marge_tmp ".$marge_tmp."</b></div>";
//echo "<div>A somme_marge ".$somme_marge."<br/><br/></div>";
} else {
$condHa = $repo_condha->findOneBy(["article" => $article]);
if (is_object($condHa)) {
//echo "<div>CONDHA OK</div>";
$prix = $condHa->getPrixAchatNet();
if ($condHa->getCoefficientConditionnement() != 0) {
$prix = $prix / $condHa->getCoefficientConditionnement();
}
$tauxChange = 1;
$fournisseur = $condHa->getFournisseur();
if (is_object($fournisseur)) {
$devise = $fournisseur->getDevise();
}
if (is_object($devise) && $devise->getTauxChange() != 0) {
$tauxChange = $devise->getTauxChange();
}
$prix = $prix * $tauxChange; //prix d'achat brut converti en euros
$marge_tmp = ($retour[$i]["quantite"] * $retour[$i]["prix_achat"]) - ($retour[$i]["quantite"] * $prix);
$somme_marge += $marge_tmp;
//echo "<div>B quantite ".$retour[$i]["quantite"]."</div>";
//echo "<div>B prix_achat ".$retour[$i]["prix_achat"]."</div>";
//echo "<div>B cpump ".$retour[$i]["cpump"]." ou ==> ".$prix."</div>";
//echo "<div><b>B marge_tmp ".$marge_tmp."</b></div>";
//echo "<div>B somme_marge ".$somme_marge."<br/><br/></div>";
}
}
} else {
$marge_tmp = "";
//echo "<div>PUMP OK</div>";
$marge_tmp = ($retour[$i]["quantite"] * $retour[$i]["prix_achat"]) - ($retour[$i]["quantite"] * $retour[$i]["cpump"]);
$somme_marge += $marge_tmp;
//echo "<div>quantite ".$retour[$i]["quantite"]."</div>";
//echo "<div>prix_achat ".$retour[$i]["prix_achat"]."</div>";
//echo "<div>cpump ".$retour[$i]["cpump"]."</div>";
//echo "<div><b>marge_tmp ".$marge_tmp."</b></div>";
//echo "<div>somme_marge ".$somme_marge."<br/><br/></div>";
}
$somme_ca += $retour[$i]["quantite"] * $retour[$i]["prix_achat"];
$somme_qte += $retour[$i]["quantite"];
}
}
//echo "<div>inArticle : ".$inArticle."</div>";
}
//$retourCa = $this->calculStatsSql($sql);
//echo "<div>XXXXsomme_marge ".$somme_marge."<br/><br/></div>";
$somme_ca_bl = $somme_ca + $somme_bl;
//echo "<div>CA FINAL ".$somme_ca_bl."</div>";
$margePourcent = "0";
if ($somme_ca_bl > 0) {
$margePourcent = round($somme_marge * 100 / $somme_ca_bl, 2);
}
$valeurs["quantite"] = $somme_qte;
$valeurs["ca"] = $somme_ca;
$valeurs["bl"] = $somme_bl;
$valeurs["marge"] = $somme_marge;
$valeurs["margePourcent"] = $margePourcent;
return $valeurs;
}
}
public function calculStatsSql($sql = "")
{
$valeur = [];
$compteur_mouvement = 0;
$somme_pump = 0;
$stmt = $this->entityManager->getConnection()->prepare($sql);
$retour = $stmt->executeQuery()->fetchAllAssociative();
if (count($retour) > 0) {
for ($i = 0; $i < count($retour); $i++) {
if ($retour[$i]["stock"] <= 0 or $retour[$i]["cpump"] <= 0) {
//echo "<div>PUMP PAS OK</div>";
$condHa = $repo_condha->findOneBy(["article" => $article, "defaut" => 1]);
if (is_object($condHa)) {
//echo "<div>CONDHA OK</div>";
$prix = $condHa->getPrixAchatNet();
if ($condHa->getCoefficientConditionnement() != 0) {
$prix = $prix / $condHa->getCoefficientConditionnement();
}
$tauxChange = 1;
$fournisseur = $condHa->getFournisseur();
if (is_object($fournisseur)) {
$devise = $fournisseur->getDevise();
}
if (is_object($devise) && $devise->getTauxChange() != 0) {
$tauxChange = $devise->getTauxChange();
}
$prix = $prix * $tauxChange; //prix d'achat brut converti en euros
$compteur_mouvement++;
//echo "<div>PRIX ".$prix."</div>";
$somme_pump = $somme_pump + $prix;
} else {
$condHa = $repo_condha->findOneBy(["article" => $article]);
if (is_object($condHa)) {
//echo "<div>CONDHA OK</div>";
$prix = $condHa->getPrixAchatNet();
if ($condHa->getCoefficientConditionnement() != 0) {
$prix = $prix / $condHa->getCoefficientConditionnement();
}
$tauxChange = 1;
$fournisseur = $condHa->getFournisseur();
if (is_object($fournisseur)) {
$devise = $fournisseur->getDevise();
}
if (is_object($devise) && $devise->getTauxChange() != 0) {
$tauxChange = $devise->getTauxChange();
}
$prix = $prix * $tauxChange; //prix d'achat brut converti en euros
$compteur_mouvement++;
//echo "<div>PRIX ".$prix."</div>";
$somme_pump = $somme_pump + $prix;
}
}
} else {
//echo "<div>PUMP OK</div>";
$compteur_mouvement++;
$somme_pump = $somme_pump + $retour[0]["cpump"];
}
}
}
if ($compteur_mouvement > 0) {
$somme_pump = $somme_pump / $compteur_mouvement;
}
}
public function getQtePriorisee($ac)
{
$repo_article_commande = $this->entityManager->getRepository(ArticleCommande::class);
//$dispo = $ac->getArticle()->getStock();
$bps = [];
$cmds = [];
if (is_object($ac)) {
$article = $ac->getArticle();
} else {
$article = $ac['article'];
}
$dispo = $article->getStock();
$date = null;
if (is_object($ac) && is_object($ac->getDatePriorisation())) {
$date = $ac->getDatePriorisation();
}
/*
else if(!is_object($ac) && isset($ac['commande']) && is_object($ac['commande'])) {
$date = $ac['commande']->getDate();
} else if(is_object($ac)) {
$date = $ac->getCommande()->getDate();
} else {
$date = NULL;
}
*
*/
$qtesPriorisees = $repo_article_commande->getQtesPriorisees($article, $date)->getQuery()->getResult();
if (count($qtesPriorisees) > 0) {
foreach ($qtesPriorisees as $qtePriorisee) {
if (in_array($qtePriorisee->getCommande()->getTypeDocumentCommercial(), [TypeDocumentCommercial::BP, TypeDocumentCommercial::BPATELIER])) {
$bps[] = $qtePriorisee;
} else {
$cmds[] = $qtePriorisee;
}
$dispo -= $qtePriorisee->getQuantiteDispo();
//echo $qtePriorisee->getCommande()->getReference().' ,';
}
}
return ['dispo' => $dispo, "bps" => $bps, 'cmds' => $cmds];
}
public function getPrixCondHaCompose(Article $articleCompose)
{
$prix = 0;
foreach ($articleCompose->getArticlesComposants() as $articleComposant) {
$prix += $this->majCondHaComposeGetInfosComposants($articleComposant, '', [], $eviterBoucleInfinie = 0);
}
return round($prix, 3);
}
private function majCondHaComposeGetInfosComposants($articleComposant, $niveau, $idMaj, $eviterBoucleInfinie)
{
if ($eviterBoucleInfinie > 1000) {
return false;
} else {
$eviterBoucleInfinie++;
}
$niveau .= '-';
$article = $articleComposant->getArticle();
$repo_fournisseur = $this->entityManager->getRepository(Fournisseur::class);
$fournisseur_dtc = $repo_fournisseur->findOneBy(['reference' => 12000]);
$repo_cond_ha = $this->entityManager->getRepository(ConditionAchat::class);
if ($article->getProduitInterne() == 1 && count($article->getArticlesComposants()) && 1 == 0) {
$prix = 0;
foreach ($article->getArticlesComposants() as $composant) {
$prixTmp = $this->majCondHaComposeGetInfosComposants($composant, $niveau, $idMaj, $eviterBoucleInfinie);
$prix += floatVal($prixTmp);
}
} else {
// $condHa = $repo_cond_ha->findOneBy(array("fournisseur"=>$fournisseur_dtc,"article"=>$article));
// if(!is_object($condHa))
// $condHa = $repo_cond_ha->findOneBy(array("article"=>$article,"defaut"=>1));
$condHa = $repo_cond_ha->findOneBy(["article" => $article, "defaut" => 1]);
if (is_object($condHa)) {
$prix = $condHa->getPrixAchatNet();
//coefficientConditionnement
if ($condHa->getCoefficientConditionnement() != 0) {
$prix = $prix / $condHa->getCoefficientConditionnement();
}
//devise
$fournisseur = $condHa->getFournisseur();
if (is_object($fournisseur)) {
$devise = $fournisseur->getDevise();
if (is_object($devise) && $devise->getTauxChange() != 0) {
$tauxChange = $devise->getTauxChange();
$prix = $prix * $tauxChange; //prix d'achat brut converti en euros
}
}
} else {
$prix = $article->getPrixBase();
}
}
$prix = $prix * $articleComposant->getQuantite();
$prix = round($prix, 3);
return $prix;
}
public function getConditionAchatParDefaut(Article $article)
{
$repo_condha = $this->entityManager->getRepository(ConditionAchat::class);
$condHa = $repo_condha->findOneBy(["article" => $article, "defaut" => 1]);
return $condHa;
}
public function getNbNumeroSerieByArticle($articleId)
{
return $this->entityManager->getRepository(NumeroSerie::class)->getNbNumeroSerieByArticle($articleId);
}
public function nbApplicationsEnfants(Article $article, $type = "", $id)
{
$repo_applications = $this->entityManager->getRepository(Application::class);
$total = "";
if ($type == "marque" && $id != "") {
$total = $repo_applications->totalApplicationEnfantsMarquesArticle($article, $id);
} elseif ($type == "modele" && $id != "") {
$total = $repo_applications->totalApplicationEnfantsModelesArticle($article, $id);
}
return $total;
}
public function hasComposes($article)
{
if ( ! is_object($article)) {
return false;
}
$composes = $this->entityManager->getRepository(ArticleComposant::class)->findByArticle($article);
return count($composes);
}
public function getTotalTache(Article $article)
{
$repo_note = $this->entityManager->getRepository(Note::class);
$total = $repo_note->getTotalTacheArticle($article);
return $total['total'];
}
public function _____getPrixEncours(Article $article, $articleCommande = '', $client, $reprise = false, $quantite = "", $adresse = "", $enregAuto = false, $round = 2)
{
$t = "";
$type_compta_client = "";
if (is_object($client)) {
if (is_object($client->getCompta())) {
$type_compta_client = $client->getCompta()->getId();
}
}
$array = ["enPromo" => false];
$repo_prixPromo = $this->entityManager->getRepository(PrixPromo::class);
$promos = $repo_prixPromo->getPromos($article, $client);
//echo "<div> TC (".$type_compta_client.")</div>";
if ($type_compta_client == "2" && 1 == 0) {
$repo_condha = $this->entityManager->getRepository(ConditionAchat::class);
$condHa = $repo_condha->findOneBy(["article" => $article, "defaut" => 1]);
if (is_object($condHa)) {
$prix = $condHa->getPrixAchatNet();
if ($condHa->getCoefficientConditionnement() != 0) {
$prix = $prix / $condHa->getCoefficientConditionnement();
}
$tauxChange = 1;
$fournisseur = $condHa->getFournisseur();
if (is_object($fournisseur)) {
$devise = $fournisseur->getDevise();
}
if (is_object($devise) && $devise->getTauxChange() != 0) {
$tauxChange = $devise->getTauxChange();
}
$prix = $prix * $tauxChange; //prix d'achat brut converti en euros
//if($condHa->getCoefficientConditionnement() > 0) $prix = $prix / $condHa->getCoefficientConditionnement();
$augmentation = $prix * 10 / 100;
$prix = $prix + $augmentation;
$prix = round($prix, $round);
} else {
$prix = $article->getPrixVente();
}
} else {
$prix = $article->getPrixVente();
}
//$prix = $article->getPrixVente();
$prixArticleCommande = false;
$array['reduction'] = '';
if (is_object($articleCommande) && ! $enregAuto) {
//echo "BABARBUBU";
$prix = floatval($articleCommande->getPrixBase());
$coefficientConditionnement = $articleCommande->getCoefficientConditionnement();
if ( ! empty($coefficientConditionnement)) {
$prix = $prix / $coefficientConditionnement;
}
$prix = round($prix, $round);
$prixArticleCommande = true;
} elseif ($quantite != 0) {
$repo_cond_vente = $this->entityManager->getRepository(ConditionVente::class);
$condVente = $repo_cond_vente->findPrixParQuantite($article, $quantite, $client, $adresse);
if (is_object($condVente)) {
$prix = $condVente->getPrix();
//echo "<div>ZZZZTUTU ".$prix."</div>";
}
}
if ($reprise == true) {
if (is_object($articleCommande)) {
$prix = floatval($articleCommande->getPrixBase());
} elseif ( ! empty($articleCommande['prixBase'])) {
$prix = $articleCommande['prixBase'];
}
$prixArticleCommande = true;
}
foreach ($promos as $p) {
if ($p->getPrix() > 0 && $p->getPrix() < $prix) {
if ( ! $prixArticleCommande) {
$array['promoId'] = $p->getId();
$prix = $p->getPrix();
$array['enPromo'] = true;
$array['reduction'] = '(-'.($article->getPrixVente() - $p->getPrix()).' €)';
}
} elseif ($p->getReduction() > 0) {
if ($p->getTypeReduction() == "montant") {
$calculNouveauPrix = $article->getPrixVente() - $p->getReduction();
if ($calculNouveauPrix < $prix) {
if ( ! $prixArticleCommande) {
$prix = $calculNouveauPrix;
$array['promoId'] = $p->getId();
$array['enPromo'] = true;
$array['reduction'] = '(-'.$p->getReduction().' €)';
}
}
} elseif ($p->getTypeReduction() == "pourcentage") {
$calculNouveauPrix = $article->getPrixVente() - ($article->getPrixVente() * $p->getReduction() / 100);
if ($calculNouveauPrix < $prix) {
if ( ! $prixArticleCommande) {
$array['promoId'] = $p->getId();
$prix = $calculNouveauPrix;
$array['enPromo'] = true;
$array['reduction'] = '(-'.$p->getReduction().'%)';
}
}
}
}
}
$array['prixVente'] = $article->getPrixVente();
$array['prix'] = $prix;
return $array;
}
//version cazin
public function getPrixEncours(Article $article, $articleCommande = '', $client, $reprise = false, $quantite = "", $adresse = "", $enregAuto = false, $round = 2)
{
//echo "<div>HELLO ".$client->getId()."</div>";
$t = "";
$type_compta_client = "";
/** @var Client $client */
if (is_object($client)) {
if (is_object($client->getCompta())) {
$type_compta_client = $client->getCompta()->getId();
}
}
//$cump = $article->getcpump
$array = ["enPromo" => false];
$repo_prixPromo = $this->entityManager->getRepository(PrixPromo::class);
$repo_devise = $this->entityManager->getRepository(Devise::class);
$promos = $repo_prixPromo->getPromos($article, $client);
$conditionVente = false;
$prixNet = 0;
$cump = $article->getCpump();
if (is_null($cump) or $cump == 0) {
$repo_condha = $this->entityManager->getRepository(ConditionAchat::class);
$condHa = $repo_condha->findOneBy(["article" => $article, "defaut" => 1]);
if (is_object($condHa)) {
$cump = $condHa->getPrixAchatNet();
if ($condHa->getCoefficientConditionnement() != 0) {
$cump = $cump / $condHa->getCoefficientConditionnement();
}
$tauxChange = 1;
$fournisseur = $condHa->getFournisseur();
$devise = $repo_devise->find(1);
if (is_object($fournisseur) and is_object($fournisseur->getDevise())) {
$devise = $fournisseur->getDevise();
}
if (is_object($devise) && $devise->getTauxChange() != 0) {
$tauxChange = $devise->getTauxChange();
}
$cump = $cump * $tauxChange; //prix d'achat brut converti en euros
$cump = round($cump, 2);
}
}
//Valable que pour DTC ?
if ($type_compta_client == "2" and 1 != 1) {
$repo_condha = $this->entityManager->getRepository(ConditionAchat::class);
$condHa = $repo_condha->findOneBy(["article" => $article, "defaut" => 1]);
if (is_object($condHa)) {
$prix = $condHa->getPrixAchatNet();
if ($condHa->getCoefficientConditionnement() != 0) {
$prix = $prix / $condHa->getCoefficientConditionnement();
}
$tauxChange = 1;
$fournisseur = $condHa->getFournisseur();
if (is_object($fournisseur)) {
$devise = $fournisseur->getDevise();
}
if (is_object($devise) && $devise->getTauxChange() != 0) {
$tauxChange = $devise->getTauxChange();
}
$prix = $prix * $tauxChange; //prix d'achat brut converti en euros
//if($condHa->getCoefficientConditionnement() > 0) $prix = $prix / $condHa->getCoefficientConditionnement();
$augmentation = $prix * 10 / 100;
$prix = $prix + $augmentation;
$prix = round($prix, 2);
} else {
$prix = $article->getPrixVente();
}
} else {
$prix = $article->getPrixVente();
}
//$prix = $article->getPrixVente();
$prixArticleCommande = false;
$array['reduction'] = '';
if (is_object($articleCommande) && ! $enregAuto) {
$prix = floatval($articleCommande->getPrixBase());
$coefficientConditionnement = $articleCommande->getCoefficientConditionnement();
if ( ! empty($coefficientConditionnement)) {
$prix = $prix / $coefficientConditionnement;
}
$prix = round($prix, 3);
$prixArticleCommande = true;
$repo_cond_vente = $this->entityManager->getRepository(ConditionVente::class);
$condVente = $repo_cond_vente->findPrixParQuantite($article, $quantite, $client, $adresse);
if (is_object($condVente)) {
//echo "LULU";
if ($prix == $condVente->getPrix()) {
$prixNet = 1;
}
} else {
//echo "LALA";
}
} elseif ($quantite != 0) {
$repo_cond_vente = $this->entityManager->getRepository(ConditionVente::class);
$condVente = $repo_cond_vente->findPrixParQuantite($article, $quantite, $client, $adresse);
if (is_object($condVente)) {
//echo "LULU";
$prix = $condVente->getPrix();
//echo "<div>ZZZZTUTU ".$prix."</div>";
$conditionVente = true;
$prixNet = 1;
} else {
//echo "LALA";
}
}
if ($reprise == true) {
if (is_object($articleCommande)) {
$prix = floatval($articleCommande->getPrixBase());
} elseif ( ! empty($articleCommande['prixBase'])) {
$prix = $articleCommande['prixBase'];
}
$prixArticleCommande = true;
}
foreach ($promos as $p) {
if ($p->getPrix() > 0 && $p->getPrix() < $prix) {
if ( ! $prixArticleCommande) {
$array['promoId'] = $p->getId();
$prix = $p->getPrix();
$array['enPromo'] = true;
$array['reduction'] = '(-'.($article->getPrixVente() - $p->getPrix()).' €)';
}
} elseif ($p->getReduction() > 0) {
if ($p->getTypeReduction() == "montant") {
$calculNouveauPrix = $article->getPrixVente() - $p->getReduction();
if ($calculNouveauPrix < $prix) {
if ( ! $prixArticleCommande) {
$prix = $calculNouveauPrix;
$array['promoId'] = $p->getId();
$array['enPromo'] = true;
$array['reduction'] = '(-'.$p->getReduction().' €)';
}
}
} elseif ($p->getTypeReduction() == "pourcentage") {
$calculNouveauPrix = $article->getPrixVente() - ($article->getPrixVente() * $p->getReduction() / 100);
if ($calculNouveauPrix < $prix) {
if ( ! $prixArticleCommande) {
$array['promoId'] = $p->getId();
$prix = $calculNouveauPrix;
$array['enPromo'] = true;
$array['reduction'] = '(-'.$p->getReduction().'%)';
}
}
}
}
}
$array['prixVente'] = $article->getPrixVente();
$array['prix'] = $prix;
$array['cump'] = $cump;
$array['conditionVente'] = $conditionVente;
$array['prixNet'] = $prixNet;
return $array;
}
public function getPrixEncoursConditionVente(Article $article, $articleCommande = '', $client, $quantite = "", $adresse = "")
{
/*
echo "<div>ART ".$article->getId()."</div>";
echo "<div>ARTC ".$articleCommande."</div>";
echo "<div>client ".$client."</div>";
echo "<div>QTE ".$quantite."</div>";
*/
//echo "<div>HELLO ".$client->getId()."</div>";
$t = "";
if (is_object($client)) {
//echo "A ".$client->getEmail();
}
$array = ["enPromo" => false];
$repo_prixPromo = $this->entityManager->getRepository(PrixPromo::class);
$promos = $repo_prixPromo->getPromos($article, $client);
$prix = $article->getPrixVente();
$prixArticleCommande = false;
$array['reduction'] = '';
//echo "<div>quantite ".$quantite."</div>";
if (is_object($articleCommande) and 1 != 1) {
$prix = $articleCommande->getPrixBase();
$prixArticleCommande = true;
} elseif ($quantite != 0) {
//echo "<div>ZZZZTUTU ".$prix."</div>";
$repo_cond_vente = $this->entityManager->getRepository(ConditionVente::class);
$condVente = $repo_cond_vente->findPrixParQuantite($article, $quantite, $client, $adresse);
if (is_object($condVente)) {
//echo "PPPP";
$prix = $condVente->getPrix();
} else {
//echo "MMMMMM";
}
}
// echo "JJJJ";
foreach ($promos as $p) {
if ($p->getPrix() > 0 && $p->getPrix() < $prix) {
// echo "<div>PRIXPROMO ".$p->getPrix()."</div>";
if ( ! $prixArticleCommande) {
$array['promoId'] = $p->getId();
$prix = $p->getPrix();
$array['enPromo'] = true;
$array['reduction'] = '(-'.($article->getPrixVente() - $p->getPrix()).' €)';
}
} elseif ($p->getReduction() > 0) {
if ($p->getTypeReduction() == "montant") {
$calculNouveauPrix = $article->getPrixVente() - $p->getReduction();
if ($calculNouveauPrix < $prix) {
if ( ! $prixArticleCommande) {
$prix = $calculNouveauPrix;
$array['promoId'] = $p->getId();
$array['enPromo'] = true;
$array['reduction'] = '(-'.$p->getReduction().' €)';
}
}
} elseif ($p->getTypeReduction() == "pourcentage") {
$calculNouveauPrix = $article->getPrixVente() - ($article->getPrixVente() * $p->getReduction() / 100);
if ($calculNouveauPrix < $prix) {
if ( ! $prixArticleCommande) {
$array['promoId'] = $p->getId();
$prix = $calculNouveauPrix;
$array['enPromo'] = true;
$array['reduction'] = '(-'.$p->getReduction().'%)';
}
}
}
}
}
$array['prixVente'] = $article->getPrixVente();
$array['prix'] = $prix;
//print_r($array);
//exit;
return $prix;
}
public function getComposants($article)
{
$articles = [];
$articlesComposants = $this->entityManager->getRepository(ArticleComposant::class)->findBy(['articleCompose' => $article]);
if (count($articlesComposants)) {
foreach ($articlesComposants as $compo) {
$articles[] = $compo->getArticle();
}
}
return $articles;
}
public function mettreAjourCompose($compose)
{
$poids = 0;
$ecocontribution = 0;
$prixBase = 0;
foreach ($compose->getArticlesComposants() as $composant) {
$prixTmp = 0;
$qteConseillee = $this->getQteConseillee($composant->getArticle());
if ( ! empty($qteConseillee['condition'])) {
$prixTmp = $qteConseillee['condition']->getPrixAchatNet();
if (floatval($qteConseillee['condition']->getCoefficientConditionnement()) != 0) {
$prixTmp = $prixTmp / floatval($qteConseillee['condition']->getCoefficientConditionnement());
}
if (is_object($qteConseillee['condition']->getFournisseur()) && is_object($qteConseillee['condition']->getFournisseur()->getDevise()) && floatval(
$qteConseillee['condition']->getFournisseur(
)->getDevise()->getTauxChange()
) != 0) {
$prixTmp = $prixTmp * floatval($qteConseillee['condition']->getFournisseur()->getDevise()->getTauxChange());
}
}
$prixBase += $prixTmp * floatVal($composant->getQuantite());
//$output->writeln("composant ecocontribution ".$composant->getArticle()->getEcocontribution());
$poids += floatVal($composant->getArticle()->getPoids()) * floatVal($composant->getQuantite());
$ecocontribution += floatVal($composant->getArticle()->getEcocontribution()) * floatVal($composant->getQuantite());
}
$compose->setPoids($poids);
$compose->setEcocontribution($ecocontribution);
$compose->setPrixBase($prixBase);
//recalcul du coefficient
if (floatval($compose->getPrixBase()) != 0 && floatval($compose->getPrixVente()) != 0) {
$coefficient = floatval($compose->getPrixVente()) / floatval($compose->getPrixBase());
$compose->setCoefficientPrixBaseVente($coefficient);
}
/*
if(floatval($compose->getPrixVente()) == 0){
$prixVente = $prixBase * floatval($compose->getCoefficientPrixBaseVente());
$compose->setPrixVente($prixVente);
}
*/
return $compose;
}
public function getNbAnnoncesPublieesParArticleEtMarketPlace($articleId, $marketPlaceId)
{
//return $articleId;
$repo_article_market_place = $this->entityManager->getRepository(ArticleMarketPlace::class);
$nbAnnonces = $repo_article_market_place->getNbAnnoncesPublieesParArticleEtMarketPlace($articleId, $marketPlaceId);
return $nbAnnonces['total'];
}
public function getNbAnnoncesParArticleEtMarketPlace($articleId, $marketPlaceId)
{
//return $articleId;
$repo_article_market_place = $this->entityManager->getRepository(ArticleMarketPlace::class);
$nbAnnonces = $repo_article_market_place->getNbAnnoncesParArticleEtMarketPlace($articleId, $marketPlaceId);
return $nbAnnonces['total'];
}
public function getNbAnnoncesPublieesParArticleEtCompteMarketPlace($articleId, $compteMarketPlaceId)
{
//return $articleId;
$repo_article_market_place = $this->entityManager->getRepository(ArticleMarketPlace::class);
$nbAnnonces = $repo_article_market_place->getNbAnnoncesPublieesParArticleEtCompteMarketPlace($articleId, $compteMarketPlaceId);
return $nbAnnonces['total'];
}
public function getNbAnnoncesParArticleEtCompteMarketPlace($articleId, $compteMarketPlaceId)
{
//return $articleId;
$repo_article_market_place = $this->entityManager->getRepository(ArticleMarketPlace::class);
$nbAnnonces = $repo_article_market_place->getNbAnnoncesParArticleEtCompteMarketPlace($articleId, $compteMarketPlaceId);
return $nbAnnonces['total'];
}
public function getPremiereImageArticleMarketPlace($articleMarketPlace_id)
{
$image = "";
$repo_image_article_market_place = $this->entityManager->getRepository(ArticleMarketPlaceImage::class);
$repo_article_market_place = $this->entityManager->getRepository(ArticleMarketPlace::class);
$articleMarketPlace = $repo_article_market_place->find($articleMarketPlace_id);
$imageArticleMarketPlace = $this->getImagesArticleMarketPlaceOrder($articleMarketPlace);
$images = $repo_image_article_market_place->findBy(["articleMarketPlace" => $articleMarketPlace], ["ordre" => "asc"]);
$tabImage = [];
$tabImg = [];
if (count($articleMarketPlace->getArticle()->getImages()) > 0) {
foreach ($articleMarketPlace->getArticle()->getImages() as $photo) {
if (array_key_exists($photo->getId(), $imageArticleMarketPlace)) {
$ordre_id = $imageArticleMarketPlace[$photo->getId()]["ordre"];
//echo "<div>ORDRE ".$ordre_id."</div>";
//$tabImg['0'.$ordre_id]=$photo;
$tabImg = array_merge($tabImg, ['0'.$ordre_id => $photo]);
}
}
}
ksort($tabImg);
$compteur = 0;
if (count($tabImg) > 0) {
foreach ($tabImg as $key => $value) {
if ($compteur == 0) {
return $value;
}
$compteur++;
}
}
return $image;
}
public function getImagesArticleMarketPlaceOrder($articleMarketPlace)
{
$repo_image_article_market_place = $this->entityManager->getRepository(ArticleMarketPlaceImage::class);
$images = $repo_image_article_market_place->findBy(["articleMarketPlace" => $articleMarketPlace], ["ordre" => "asc"]);
$tableau_id = [];
foreach ($images as $img) {
$tableau_id[$img->getImage()->getId()] = ["id" => $img->getImage()->getId(), "ordre" => $img->getOrdre(), "articleMarketPlaceImage" => $img];
}
//print_r($tableau_id);
return $tableau_id;
}
public function getImagesArticleMarketPlace($articleMarketPlace)
{
$repo_image_article_market_place = $this->entityManager->getRepository(ArticleMarketPlaceImage::class);
$images = $repo_image_article_market_place->findBy(["articleMarketPlace" => $articleMarketPlace]);
$tableau_id = [];
foreach ($images as $img) {
$tableau_id[] = $img->getImage()->getId();
}
return $tableau_id;
}
public function getReferenceDivers($article = null)
{
$numero_reference = $this->entityManager->getRepository(Article::class)->getMaxNumeroReference($article);
$numero_reference++;
//$numero_reference = 2896;
$numero_reference_retour = $numero_reference;
$reference = 0;
$unite = $numero_reference % 10;
$numero_reference -= $unite;
$reference += $unite;
$dizaine = $numero_reference % 100;
$numero_reference -= $dizaine;
$reference += $dizaine;
$centaine = $numero_reference % 1000;
$numero_reference -= $centaine;
$reference += $centaine;
//transformer les milliers en chiffres
$lettres = '';
$milliers = $numero_reference / 1000;
$tableauLettres = range('A', 'Z');
$nbLettres = floor($milliers / count($tableauLettres));
for ($i = 0; $i < $nbLettres; $i++) {
$lettres .= 'Z';
}
$reste = $milliers % count($tableauLettres);
$lettres .= $tableauLettres[$reste];
/*
while(strlen($lettres) < 2){
$lettres = 'A'.$lettres;
}
*/
while (strlen($reference) < 3) {
$reference = '0'.$reference;
}
$reference = $lettres.$reference;
return ['numero_reference' => $numero_reference_retour, 'reference' => $reference];
}
public function getCommentaires()
{
return $this->entityManager->getRepository(Article::class)->findBy([
'est_commentaire' => 1,
], ['reference' => 'ASC']);
}
public function capaciteProduction($article, $count = 0)
{
$count++;
if ($count > 100) {
return 0;
}
$capacites = [];
foreach ($article->getArticlesComposants() as $composant) {
$articleTmp = $composant->getArticle();
if ( ! $articleTmp->getNonStocke() && ! $articleTmp->getPrestation() && ! $articleTmp->getMainOeuvre()) {
$dispo = $articleTmp->getDispo() / $composant->getQuantite();
if ($articleTmp->getProduitInterne()) {
$dispo += $this->capaciteProduction($articleTmp, $count);
}
$capacites[] = $dispo;
}
}
if (count($capacites)) {
return min($capacites);
} else {
return 0;
}
}
public function creerHistorique($article, $typeMessage, $donnees = [])
{
$enregistrer = false;
$message = $article->getReference();
$user = "";
if ($this->security->getUser() !== null) {
$user = $this->security->getUser();
}
$nbNouvellesLignes = 0;
$typesMessage = [$typeMessage];
foreach ($typesMessage as $typeMessage) {
switch ($typeMessage) {
case 1 :
$titre = 'Création article';
if (array_key_exists('message', $donnees)) {
$message .= ' '.$donnees['message'];
}
break;
default:
$titre = '';
if (array_key_exists('titre', $donnees)) {
$titre = $donnees['titre'];
}
if (array_key_exists('message', $donnees)) {
$message .= ' '.$donnees['message'];
}
break;
}
$historique = new HistoriqueArticle();
if ( ! empty($titre)) {
$historique->setTitre($titre);
$historique->setArticle($article);
if (is_object($user)) {
$historique->setUtilisateur($user);
}
if ( ! empty($message)) {
$historique->setMessage($message);
}
$this->entityManager->persist($historique);
$enregistrer = true;
}
}
if ($enregistrer) {
$this->entityManager->flush();
}
//return $historique;
}
function majrefAppelFourSurArticle($article_id)
{
$conn = $this->entityManager->getConnection();
$sql_cond = "select id,reference_fournisseur from article__condition_achat where date_supression is null and article_id = ".$article_id;
$stmt = $conn->executeQuery($sql_cond);
$cond_achats = $stmt->fetchAllAssociative();
$total_cond_achats = count($cond_achats);
$ref_appel = "";
$tab_appel = [];
if ($total_cond_achats > 0) {
foreach ($cond_achats as $cond_bdd) {
//$output->writeln("REFFOUR:".$cond_bdd["reference_fournisseur"]);
$ref_four_tmp = $cond_bdd["reference_fournisseur"];
$cond_bdd["reference_fournisseur"] = str_replace("-", "", $cond_bdd["reference_fournisseur"]);
$cond_bdd["reference_fournisseur"] = str_replace(".", "", $cond_bdd["reference_fournisseur"]);
if ( ! in_array($cond_bdd["reference_fournisseur"], $tab_appel)) {
$tab_appel[] = $cond_bdd["reference_fournisseur"];
$ref_appel .= $cond_bdd["reference_fournisseur"]."-";
$ref_appel .= $ref_four_tmp."-";
}
}
}
$ref_appel = trim($ref_appel, "-");
$conn->update('article__article', ["reference_appel_10" => $ref_appel], ['id' => $article_id]);
}
public function getStockPreparable(ArticleCommande $articleCommande)
{
$stockPreparable = 0;
$repo_article_commande = $this->entityManager->getRepository(ArticleCommande::class);
//$quantiteDejaPrepareeSimplifieeGlobal = $repo_article_commande->getQuantiteDejaPrepareeSimplifiee($articleCommande->getArticle()->getId(),$articleCommande->getCommande());
$quantiteDejaPrepareeSimplifieeGlobal = $repo_article_commande->getQuantiteDejaPrepareeSimplifieeV2($articleCommande->getArticle()->getId());
$stockPreparable = $articleCommande->getArticle()->getStock() - $quantiteDejaPrepareeSimplifieeGlobal;
$stockPreparable -= $articleCommande->getQuantiteDejaPrepareeSimplifie();
$stockPreparable = max(0, $stockPreparable);
return $stockPreparable;
}
public function getComposantsPreparerEmballer($article, $quantite)
{
$articlesComposants = [];
if (is_object($article) && $article->getVirtuel()) {
foreach ($article->getArticlesComposants() as $articleComposant) {
if (is_object($articleComposant->getArticle()) && $articleComposant->getArticle()->getVirtuel()) {
$articlesComposants = array_merge(
$articlesComposants,
$this->getComposantsPreparerEmballer($articleComposant->getArticle(), $articleComposant->getQuantite() * $quantite)
);
} elseif ( ! $articleComposant->getArticle()->getNonPreparable()) {
$articlesComposants[] = ['articleComposant' => $articleComposant, 'quantite' => $articleComposant->getQuantite() * $quantite];
}
}
}
return $articlesComposants;
}
public function getPrixAchatNetEuro($article)
{
$repo_article = $this->entityManager->getRepository(Article::class);
if ( ! is_object($article)) {
$article = $repo_article->find($article);
}
if ($article->getVirtuel()) {
$prix = $this->getPrixAchatCompose($article);
} else {
$prix = 0;
$repo_condha = $this->entityManager->getRepository(ConditionAchat::class);
$condHa = $repo_condha->findOneBy(["article" => $article, "defaut" => 1]);
if ( ! is_object($condHa)) {
$condHa = $repo_condha->findOneBy(["article" => $article]);
}
if (is_object($condHa)) {
$prix = $condHa->getPrixAchatNet();
$coefficientConditionnement = $condHa->getCoefficientConditionnement();
if ($coefficientConditionnement != 0) {
$prix = $prix / $coefficientConditionnement;
}
$fournisseur = $condHa->getFournisseur();
if (is_object($fournisseur)) {
$devise = $fournisseur->getDevise();
if (is_object($devise)) {
$tauxChange = $devise->getTauxChange();
if ($tauxChange != 0) {
$prix = $prix * $tauxChange;
}
}
}
}
}
return $prix;
}
public function getArticlesSansReference() {
$sql = "SELECT count(*) as total
FROM article__article
WHERE reference is null or reference = ''
";
$stmt = $this->entityManager->getConnection()->prepare($sql);
$existe = $stmt->executeQuery()->fetchAllAssociative();
return $existe[0]["total"];
}
public function getArticlesOqtonManquant() {
$sql = "SELECT count(*) as total
FROM article__article
WHERE type_id = 1
AND
(oqton_urn is null or oqton_urn = '' or oqton_material_urn is null or oqton_material_urn = '')
";
$stmt = $this->entityManager->getConnection()->prepare($sql);
$existe = $stmt->executeQuery()->fetchAllAssociative();
return $existe[0]["total"];
}
public function getCategorieDernierNiveau(Article $article)
{
$categorie_obj = NULL;
$sql = "SELECT c.id, c.libelle
FROM article__categorie c
INNER JOIN article__article_categorie ac ON ac.categorie_id = c.id
LEFT JOIN article__categorie child ON child.categorie_parent_id = c.id AND child.statut = 1
WHERE ac.article_id = ".$article->getid()."
AND c.statut = 1
AND child.id IS NULL;
";
$stmt = $this->entityManager->getConnection()->prepare($sql);
$existe = $stmt->executeQuery()->fetchAllAssociative();
if(count($existe)>0) {
$categorie_obj = $this->entityManager->getRepository(Categorie::class)->find($existe[0]["id"]);
}
return $categorie_obj;
}
public function findRandomArticles(int $limit = 3,$categorie_id,$user_id = 0)
{
$repo_article = $this->entityManager->getRepository(Article::class);
$articles = $repo_article->findRandomArticles($limit,$categorie_id,$user_id);
return $articles;
}
public function getArticlesComplement($article_id)
{
$articleComplements = $this->entityManager->getRepository(ArticleComplementOption::class)->findEnfantsByParentAndStatus($article_id, $status = 1,'complement');
return $articleComplements;
}
public function getDatesProchainesDispo($article_id)
{
$datesProchainesDispo = $this->entityManager->getRepository(ArticleDateDispo::class)->getDatesProchainesDispo($article_id);
return $datesProchainesDispo;
}
}