private void updateLigneFromIboLigne(LigneCommande ligne, IBODocumentAchatLigne3 IBOLigne)
 {
     IBOLigne.Refresh();
     if (IBOLigne.ArticleGammeEnum2 != null)
     {
         ligne.QteCom = IBOLigne.Article.StockCommandeDoubleGamme(IBOLigne.ArticleGammeEnum1, IBOLigne.ArticleGammeEnum2);
         ligne.QteRes = IBOLigne.Article.StockReserveContremarqueDoubleGamme(IBOLigne.ArticleGammeEnum1, IBOLigne.ArticleGammeEnum2);
     }
     else if (IBOLigne.ArticleGammeEnum1 != null)
     {
         ligne.QteCom = IBOLigne.Article.StockCommandeMonoGamme(IBOLigne.ArticleGammeEnum1);
         ligne.QteRes = IBOLigne.Article.StockReserveContremarqueMonoGamme(IBOLigne.ArticleGammeEnum1);
     }
     else
     {
         ligne.QteCom = IBOLigne.Article.StockCommande();
         ligne.QteRes = IBOLigne.Article.StockReserve();
     }
 }
        private void addVbcLigneToAbcExistant(IBODocumentVenteLigne3 ligneV, LiaisonCde liaison)
        {
            IBODocumentAchat3 docA = GetInstance().FactoryDocumentAchat.ReadPiece(DocumentType.DocumentTypeAchatCommandeConf, liaison.NumPiece);

            foreach (IBODocumentAchatLigne3 ligneA in docA.FactoryDocumentLigne.List)
            {
                int dlNoIn = int.Parse(ligneA.InfoLibre["DLNo"]);
                if (dlNoIn == liaison.DLNoIn)
                {
                    // Si la quantité demandée est inférieure à la quantité de la ligne
                    if (liaison.Qte < liaison.DlQteBL)
                    {
                        IBODocumentAchatLigne3 liaisonALigne = (IBODocumentAchatLigne3)docA.FactoryDocumentLigne.Create();
                        addArticleFromLigneAToLigneB(ligneA, liaisonALigne, liaison.Qte);

                        // Force le prix d'achat de la ligne d'origine (peut être une cde depot)
                        if (liaisonALigne.Fournisseur.CT_Num != ligneA.Article.FournisseurPrincipal.Fournisseur.CT_Num)
                        {
                            liaisonALigne.DL_PrixUnitaire = ligneA.DL_PrixUnitaire;
                        }

                        double conversion = 1;
                        double convDiv    = 1;
                        foreach (IBOArticleTarifFournisseur3 tarif in ligneA.Article.FactoryArticleTarifFournisseur.List)
                        {
                            if (tarif.Fournisseur == docA.Fournisseur)
                            {
                                conversion = tarif.AF_Conversion;
                                convDiv    = tarif.AF_ConvDiv;
                            }
                        }

                        liaisonALigne.DL_Qte = liaison.Qte;
                        liaisonALigne.EU_Qte = (liaison.Qte / conversion) * convDiv;
                        liaisonALigne.SetDefaultRemise();
                        liaisonALigne.Collaborateur     = ligneV.Collaborateur;
                        liaisonALigne.DO_Ref            = liaison.DlNoOut.ToString();
                        liaisonALigne.DL_Design         = ligneV.DL_Design;
                        liaisonALigne.TxtComplementaire = ligneV.TxtComplementaire;
                        liaisonALigne.Write();
                        liaisonALigne.Refresh();
                        dlNoIn = int.Parse(liaisonALigne.InfoLibre["DLNo"]);

                        // Si la ligne d'origine avait déjà une contremarque
                        if (liaison.CMQteTotal > 0)
                        {
                            ligneA.DL_Qte = liaison.DlQteBL - liaison.Qte;
                            ligneA.EU_Qte = (ligneA.DL_Qte / conversion) * convDiv;
                            ligneA.SetDefaultRemise();
                            ligneA.Write();
                        }
                        else
                        {
                            // Crée une nouvelle ligne avec le delta à partir de la ligne d'origine
                            IBODocumentAchatLigne3 ligneACopy = (IBODocumentAchatLigne3)docA.FactoryDocumentLigne.Create();
                            double delta = liaison.DlQteBL - liaison.Qte;
                            addArticleFromLigneAToLigneB(ligneA, ligneACopy, delta);
                            if (ligneACopy.Fournisseur.CT_Num != ligneA.Article.FournisseurPrincipal.Fournisseur.CT_Num)
                            {
                                ligneACopy.DL_PrixUnitaire = ligneA.DL_PrixUnitaire;
                            }
                            ligneACopy.DL_Qte = delta;
                            ligneACopy.EU_Qte = (delta / conversion) * convDiv;
                            ligneACopy.SetDefaultRemise();
                            ligneACopy.Collaborateur     = ligneA.Collaborateur;
                            ligneACopy.DL_Design         = ligneA.DL_Design;
                            ligneACopy.TxtComplementaire = ligneA.TxtComplementaire;
                            ligneACopy.Write();
                            ligneACopy.Refresh();

                            // Supprime la ligne d'origine
                            ligneA.Remove();
                        }
                    }

                    // Ajout de la CM
                    using (SqlConnection cnx = new SqlConnection(cnxString)) {
                        cnx.Open();

                        using (SqlCommand cmd = cnx.CreateCommand())
                        {
                            cmd.CommandText = @"INSERT INTO F_CMLIEN(DL_NoOut, DL_NoIn, CM_Qte) VALUES(@dlNoOut, @dlNoIn, @cmQte)";
                            cmd.Parameters.AddWithValue("@dlNoOut", ligneV.InfoLibre["DLNo"]);
                            cmd.Parameters.AddWithValue("@dlNoIn", dlNoIn);
                            cmd.Parameters.AddWithValue("@cmQte", liaison.Qte);
                            cmd.ExecuteNonQuery();
                        }
                    }
                }
            }
        }