コード例 #1
0
        /// <summary>
        /// Edite la commande en fonction du type
        /// après retour du service intermag
        /// </summary>
        /// <param name="doPieceOrigin">N° de l'ABC qui a été envoyé au founisseur</param>
        /// <param name="magPiece"></param>
        /// <param name="ds"></param>
        /// <param name="targetDb"></param>
        /// <param name="typeIndex"></param>
        private void editCde(string doPieceOrigin, string magPiece, DataSet ds, string targetDb, int typeIndex)
        {
            try
            {
                if (openBaseCial() == false)
                {
                    throw new Exception("Connexion à la base impossible");
                }

                IBODocumentAchat3 docAOrigin = GetInstance().FactoryDocumentAchat.ReadPiece(
                    DocumentType.DocumentTypeAchatCommandeConf,
                    doPieceOrigin
                    );

                // Vérouille le doc
                docAOrigin.CouldModified();

                if (typeIndex == 0)
                {
                    editCommandeDepot(docAOrigin, magPiece);
                }
                else if (typeIndex == 1)
                {
                    editCommandeRetro(docAOrigin, magPiece, targetDb);
                }
            }
            catch (Exception e)
            {
                throw new Exception(e.ToString());
            }
        }
コード例 #2
0
        public bool DocumentIsClosed(string doPiece)
        {
            openBaseCial();
            IBODocumentAchat3 docA = GetInstance().FactoryDocumentAchat.ReadPiece(DocumentType.DocumentTypeAchatCommandeConf,
                                                                                  doPiece);

            docA.CouldModified();
            return(true);
        }
コード例 #3
0
        /// <summary>
        /// Vérifie que le doc en cours ainsi que lees éventuels docs
        /// liés ne sont pas en cours d'utilisation
        /// </summary>
        /// <param name="CmLignes"></param>
        /// <param name="doPiece"></param>
        /// <returns></returns>
        public bool DocumentIsClosed(Collection <Contremarque> CmLignes, string doPiece)
        {
            if (openBaseCial())
            {
                try
                {
                    var doc = (IBODocumentVente3)GetDocument(doPiece);
                    doc.CouldModified();
                    // Sinon le doc reste ouvert pour OM
                    doc.Write();
                }
                catch (Exception)
                {
                    throw new Exception($"Veuillez fermer le document {doPiece}");
                }

                foreach (Contremarque cm in CmLignes)
                {
                    if (cm.Liaisons != null)
                    {
                        foreach (LiaisonCde li in cm.Liaisons)
                        {
                            if (li.Qte > 0)
                            {
                                try
                                {
                                    IBODocumentAchat3 doc = GetInstance().FactoryDocumentAchat.ReadPiece(DocumentType.DocumentTypeAchatCommandeConf, li.NumPiece);
                                    doc.CouldModified();
                                    // TODO doc.Read()
                                    doc.Write();
                                }
                                catch (Exception)
                                {
                                    throw new Exception($"Veuillez fermer le document {li.NumPiece}");
                                }
                            }
                        }
                    }
                }
            }

            return(true);
        }
コード例 #4
0
        public bool DocumentIsClosed(string doPiece)
        {
            if (openBaseCial())
            {
                try
                {
                    IBODocumentAchat3 doc = GetInstance().FactoryDocumentAchat.ReadPiece(DocumentType.DocumentTypeAchatCommandeConf, doPiece);
                    doc.CouldModified();
                    // Sinon le doc reste ouvert pour OM
                    doc.Write();
                }
                catch (Exception)
                {
                    throw new Exception($"Veuillez fermer le document {doPiece}");
                }
            }

            return(true);
        }
コード例 #5
0
        public Commande GetCommande(string DoPiece)
        {
            if (openBaseCial())
            {
                var Doc = GetDocument(DoPiece);
                if (Doc == null)
                {
                    throw new Exception($"Document {DoPiece} non trouvé");
                }

                if (Doc.DO_Type != DocumentType.DocumentTypeAchatCommande)
                {
                    Doc.Read();
                    throw new Exception("Le document doit être un APC.");
                }

                foreach (IBODocumentAchatLigne3 ligne in Doc.FactoryDocumentLigne.List)
                {
                    if (ligne.FactoryDocumentLigneLienCM.List.Count > 0)
                    {
                        Doc.Read();
                        throw new Exception("Le document ne doit pas contenir de contremarque.");
                    }
                }

                _OMDocument = (IBODocumentAchat3)Doc;
                //_OMDocument = GetInstance().FactoryDocumentAchat.ReadPiece(DocumentType.DocumentTypeAchatCommande, DoPiece);
                //_OMDocument.CouldModified();
            }

            using (var cnx = new SqlConnection(cnxString))
            {
                cnx.Open();

                using (SqlCommand cmd = cnx.CreateCommand())
                {
                    cmd.CommandText = @"SELECT AF.CT_Num, CT.FRANCO, CT.CT_Intitule, AG1.AG_No AS AG_No1, AG2.AG_No AS AG_No2, A.AR_PrixAch,
                            A.AR_Ref, AE.AE_Ref, AG1.EG_Enumere AS Gamme1, AG2.EG_Enumere AS Gamme2,
                            (SELECT SUM(DL_Qte) FROM F_DOCLIGNE WHERE AR_Ref = A.AR_Ref AND DO_Type = 7 AND MONTH(DL_DateBL) = MONTH(GETDATE()) AND YEAR(DL_DateBL) = YEAR(GETDATE())-1) AS Stat,
                            DL.DL_Qte, DL.EU_Qte, A.AR_Sommeil, A.SUPPRIME, A.SUPPRIME_USINE, A.AR_Design, A.AR_CodeBarre,
                            CASE WHEN ISNULL(TG.TG_Ref, '') = '' THEN AF.AF_RefFourniss ELSE TG.TG_Ref END AS RefFourn,
                            AF.AF_Colisage, AF.AF_QteMini, D.DP_Code, AC.AC_PrixVen, UA.U_Intitule AS UniteAch,
                            ISNULL(S.AS_QteMini, 0) AS AS_QteMini, ISNULL(S.AS_QteMaxi, 0) AS AS_QteMaxi,
                            CASE WHEN AG1.EG_Enumere IS NOT NULL THEN ISNULL(GS.GS_QteSto, 0) ELSE ISNULL(S.AS_QteSto, 0) END AS QteSto, 
                            CASE WHEN AG1.EG_Enumere IS NOT NULL THEN ISNULL(GS.GS_QteCom, 0) ELSE ISNULL(S.AS_QteCom, 0) END AS QteCom, 
                            CASE WHEN AG1.EG_Enumere IS NOT NULL THEN ISNULL(GS.GS_QteRes, 0) ELSE ISNULL(S.AS_QteRes, 0) END AS QteRes, 
                            UV.U_Intitule AS UniteVen,
                            CASE WHEN ISNULL(S.AS_QteMini, 0) = 0 OR A.AR_Sommeil = 1 OR A.SUPPRIME LIKE 'oui' OR A.SUPPRIME_USINE LIKE 'oui' THEN 0 ELSE 1 END AS OBS
                            FROM F_ARTICLE A 
                            LEFT JOIN F_ARTGAMME AG1 ON AG1.AR_Ref = A.AR_Ref AND AG1.AG_Type = 0
                            LEFT JOIN F_ARTGAMME AG2 ON AG2.AR_Ref = A.AR_Ref AND AG2.AG_Type = 1
                            LEFT JOIN F_ARTENUMREF AE ON AE.AG_No1 = AG1.AG_No AND AE.AG_No2 = ISNULL(AG2.AG_No, 0)
                            JOIN F_ARTFOURNISS AF ON AF.AR_Ref = A.AR_Ref 
                            JOIN F_COMPTET CT ON CT.CT_Num = AF.CT_Num
                            LEFT JOIN F_TARIFGAM TG ON TG.AG_No1 = AG1.AG_No AND TG.AG_No2 = ISNULL(AG2.AG_No, 0) AND TG.TG_RefCF = AF.CT_Num
                            LEFT JOIN F_ARTSTOCK S ON S.AR_Ref = A.AR_Ref 
                            LEFT JOIN F_GAMSTOCK GS ON GS.AR_Ref = A.AR_Ref AND GS.AG_No1 = AG1.AG_No AND GS.AG_No2 = ISNULL(AG2.AG_No, 0)
                            JOIN P_UNITE AS UV ON UV.cbIndice = A.AR_UniteVen 
                            JOIN P_UNITE AS UA ON UA.cbIndice = AF.AF_Unite
                            JOIN F_ARTCLIENT AC ON AC.AR_Ref = A.AR_Ref AND AC.AC_Categorie = 1 
                            LEFT JOIN F_DEPOTEMPL D ON S.DE_No = D.DE_No AND S.DP_NoPrincipal = D.DP_No 
                            LEFT JOIN F_DOCLIGNE DL ON DL.AR_Ref = A.AR_Ref AND DL.DO_Piece = @doPiece 
                            WHERE AF.CT_Num = (SELECT DO_Tiers FROM F_DOCENTETE WHERE DO_Piece = @doPiece)
                            AND AF.AF_Principal = 1 
                            ORDER BY A.AR_Ref, Gamme1, Gamme2";
                    cmd.Parameters.AddWithValue("@doPiece", DoPiece);

                    using (SqlDataReader reader = cmd.ExecuteReader())
                    {
                        if (!reader.HasRows)
                        {
                            throw new Exception("Aucun résultat");
                        }

                        _Commande = new Commande();
                        while (reader.Read())
                        {
                            if (_Commande.CtNum == null)
                            {
                                _Commande.CtNum       = reader["CT_Num"].ToString();
                                _Commande.Fournisseur = reader["CT_Intitule"].ToString();
                                _Commande.Piece       = DoPiece;
                                _Commande.Franco      = reader["FRANCO"].ToString();
                            }

                            var ligne = new LigneCommande()
                            {
                                ArRef         = (string)reader["AR_Ref"],
                                AeRef         = (reader["AE_Ref"] == DBNull.Value) ? null : (string)reader["AE_Ref"],
                                Gamme1        = (reader["Gamme1"] == DBNull.Value) ? null : (string)reader["Gamme1"],
                                Gamme2        = (reader["Gamme2"] == DBNull.Value) ? null : (string)reader["Gamme2"],
                                AGNo1         = (reader["AG_No1"] == DBNull.Value) ? (int?)null : (int)reader["AG_No1"],
                                AGNo2         = (reader["AG_No2"] == DBNull.Value) ? (int?)null : (int)reader["AG_No2"],
                                Stat          = double.Parse(reader["Stat"] == DBNull.Value ? "0" : reader["Stat"].ToString()),
                                Sommeil       = (Int16)reader["AR_Sommeil"] == 1,
                                Supprime      = (string)reader["SUPPRIME"] == "Oui",
                                SupprimeUsine = (string)reader["SUPPRIME_USINE"] == "Oui",
                                RefFourn      = (string)reader["RefFourn"],
                                Designation   = (string)reader["AR_Design"],
                                UniteVente    = (string)reader["UniteVen"],
                                UniteAchat    = (string)reader["UniteAch"],
                                Colisage      = double.Parse(reader["AF_Colisage"].ToString()),
                                Qec           = double.Parse(reader["AF_QteMini"].ToString()),
                                StockMin      = double.Parse(reader["AS_QteMini"].ToString()),
                                StockMax      = double.Parse(reader["AS_QteMaxi"].ToString()),
                                pxTTC         = double.Parse(reader["AC_PrixVen"].ToString()),
                                Qte           = (reader["DL_Qte"] == DBNull.Value) ? (double?)null : double.Parse(reader["DL_Qte"].ToString()),
                                CodeBarre     = reader["AR_CodeBarre"].ToString(),
                                Emplacement   = reader["DP_Code"].ToString(),
                                Stock         = (reader["QteSto"] == DBNull.Value) ? 0 : double.Parse(reader["QteSto"].ToString()),
                                QteCom        = double.Parse(reader["QteCom"].ToString()),
                                QteRes        = double.Parse(reader["QteRes"].ToString()),
                                ArPrixAch     = double.Parse(reader["AR_PrixAch"].ToString()),
                            };
                            ligne.PropertyChanged += Ligne_PropertyChanged;
                            _Commande.Lignes.Add(ligne);
                        }

                        return(_Commande);
                    }
                }
            }
        }
コード例 #6
0
        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();
                        }
                    }
                }
            }
        }
コード例 #7
0
        /// <summary>
        /// Génère des APC en contremarque
        /// Envoi les APC au magasin cible
        /// </summary>
        /// <param name="CmLignes"></param>
        /// <param name="doPiece"></param>
        /// <param name="disableIntermag"></param>
        public void saveAll(Collection <Contremarque> CmLignes, string doPiece, bool disableIntermag)
        {
            var docV = (IBODocumentVente3)GetDocument(doPiece);

            if (!openBaseCial())
            {
                throw new Exception("Impossible de se connecter à Sage :-(");
            }

            #region Ajout ABC Existant
            // Prétraitement Si Ajout à ABC existant
            foreach (IBODocumentVenteLigne3 ligneV in docV.FactoryDocumentLigne.List)
            {
                int DLNo = int.Parse(ligneV.InfoLibre["DLNo"]);

                if (CmLignes.Count(c => c.DlNo == DLNo) == 0)
                {
                    continue;
                }

                Contremarque cm = CmLignes.Where(c => c.DlNo == DLNo).First();
                if (!cm.RowChecked)
                {
                    continue;
                }

                // Ajout a ABC existant (1 seul possible)
                double liaisonTot = cm.Liaisons.Sum(l => l.Qte);
                if (liaisonTot > 0)
                {
                    IEnumerable <LiaisonCde> liaisons = cm.Liaisons.Where(l => l.Qte > 0);
                    LiaisonCde liaison = liaisons.First();
                    Log($"Réserve {liaison.Qte} x {cm.RefMag} sur {liaison.NumPiece} existant");
                    liaison.DlNoOut = int.Parse(ligneV.InfoLibre["DLNo"]);
                    addVbcLigneToAbcExistant(ligneV, liaison);
                }
            }
            #endregion Ajout ABC Existant

            #region Groupe les lignes par fournisseur
            var dict = new Dictionary <string, Collection <Contremarque> >();
            foreach (Contremarque cm in CmLignes)
            {
                // Ne prend pas en compte les lignes déjà en contremarque ou avec liaison
                if (!cm.RowChecked || cm.NumPiece != "" || cm.Liaisons.Sum(l => l.Qte) > 0)
                {
                    continue;
                }

                string key = cm.SelectedFourn == "Principal" ? cm.FournPrinc : cm.SelectedFourn;
                if (!dict.ContainsKey(key))
                {
                    dict.Add(key, new Collection <Contremarque>());
                }

                dict[key].Add(cm);
            }
            if (dict.Count == 0)
            {
                return;
            }
            #endregion Groupe les lignes par fournisseur

            #region Ajout contremarque

            foreach (KeyValuePair <string, Collection <Contremarque> > entry in dict)
            {
                IPMDocument     procDocA;
                IBOFournisseur3 fourn;

                if (!entry.Value[0].IsInterMag)
                {
                    // Génération d'un APC Fournisseur
                    Log($"Génération d'un APC Fournisseur principal {entry.Value[0].FournPrinc}");
                    procDocA = GetInstance().CreateProcess_Document(DocumentType.DocumentTypeAchatCommande);
                    fourn    = GetInstance().CptaApplication.FactoryFournisseur.ReadNumero(entry.Value[0].FournPrinc);
                }
                else
                {
                    // Génération d'un ABC InterMag
                    Log($"Génération d'un ABC Fournisseur intermag {entry.Key}");
                    procDocA = GetInstance().CreateProcess_Document(DocumentType.DocumentTypeAchatCommandeConf);
                    using (SqlConnection cnx = new SqlConnection(cnxString))
                    {
                        cnx.Open();

                        using (SqlCommand cmd = cnx.CreateCommand())
                        {
                            cmd.CommandText = "SELECT CT_Num FROM F_COMPTET WHERE CT_Classement = @abrege AND CT_Type = 1";
                            cmd.Parameters.AddWithValue("@abrege", entry.Value[0].SelectedFourn);
                            using (SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.SingleRow))
                            {
                                reader.Read();
                                fourn =
                                    GetInstance()
                                    .CptaApplication.FactoryFournisseur.ReadNumero((string)reader["CT_Num"]);
                            }
                        }
                    }
                }

                IBODocumentAchat3 docAEntete = (IBODocumentAchat3)procDocA.Document;
                docAEntete.DO_DateLivr = docV.DO_DateLivr;
                docAEntete.SetDefaultFournisseur(fourn);
                docAEntete.Collaborateur = docV.Collaborateur;

                foreach (Contremarque cm in entry.Value)
                {
                    IBODocumentAchatLigne3 docALigne = null;

                    if (cm.IsCommentaire)
                    {
                        docALigne           = (IBODocumentAchatLigne3)docAEntete.FactoryDocumentLigne.Create();
                        docALigne.DL_Design = cm.Design;
                        docALigne.WriteDefault();
                    }
                    else
                    {
                        // Retrouve la ligne de vente pour ajouter l'article
                        foreach (IBODocumentVenteLigne3 ligneV in docV.FactoryDocumentLigne.List)
                        {
                            int DLNo = int.Parse(ligneV.InfoLibre["DLNo"]);
                            if (DLNo == cm.DlNo)
                            {
                                double qt = cm.QteTotal;
                                docALigne           = (IBODocumentAchatLigne3)addArticleFromLigne(procDocA, ligneV, qt);
                                docALigne.DL_Design = cm.Design;
                                // Applique par defaut le conditionnement de vente
                                docALigne.DL_Qte         = qt;
                                docALigne.EU_Qte         = qt;
                                docALigne.EU_Enumere     = ligneV.Article.Unite.Intitule;
                                docALigne.AF_RefFourniss = cm.RefFourn;

                                // Tente de convertir si fourn princ
                                foreach (IBOArticleTarifFournisseur3 tarif in docALigne.Article.FactoryArticleTarifFournisseur.List)
                                {
                                    if (tarif.Fournisseur == fourn && tarif.AF_ConvDiv != tarif.AF_Conversion)
                                    {
                                        //Debug.Print($"{tarif.Article.AR_Ref}, {tarif.AF_Conversion}, {tarif.AF_ConvDiv}");
                                        double qtColisee = qt * (tarif.AF_ConvDiv / tarif.AF_Conversion);
                                        docALigne.EU_Qte     = qtColisee;
                                        docALigne.EU_Enumere = tarif.Unite.Intitule;
                                    }
                                }

                                docALigne.SetDefaultRemise();
                                docALigne.Collaborateur     = docV.Collaborateur;
                                docALigne.DO_Ref            = cm.DlNo.ToString();
                                docALigne.DO_DateLivr       = ligneV.DO_DateLivr;
                                docALigne.TxtComplementaire = cm.TexteComplementaire;
                                docALigne.Write();
                            }
                        }
                    }
                }

                // Si devis => Demande de prix
                // On applique après lacréation des ligne car sinon le DO_Ref va se copier sur chaque ligne
                if (CmLignes.First().Type == 0)
                {
                    docAEntete.DO_Ref    = "DEMANDE PRIX";
                    docAEntete.DO_Statut = DocumentStatutType.DocumentStatutTypeSaisie;
                }
                else
                {
                    docAEntete.DO_Ref    = "RESERVATION";
                    docAEntete.DO_Statut = DocumentStatutType.DocumentStatutTypeAPrepare;
                }

                // On vire les articles liés en doublons
                // on le sait car le champs DO_Ref est vide
                foreach (IBODocumentAchatLigne3 ligne in procDocA.Document.FactoryDocumentLigne.List)
                {
                    if (ligne.DO_Ref == "")
                    {
                        ligne.Remove();
                    }
                }

                if (procDocA.CanProcess)
                {
                    procDocA.Process();

                    foreach (IBODocumentAchatLigne3 ligne in GetDocument(docAEntete.DO_Piece).FactoryDocumentLigne.List)
                    {
                        if (ligne.Article != null && (ligne.Article.AR_Ref == "DIVERS" || ligne.Article.Famille.FA_CodeFamille == "UNIQUE"))
                        {
                            new DiversRepository().saveLigneAchat(ligne);
                        }
                    }
                }
                else
                {
                    Log(GetProcessError(procDocA));
                    return;
                }

                Log($"Document {docAEntete.DO_Piece} créé.");

                // Création des lignes de contremarque
                // Log("Création des lignes de contremarque");
                using (SqlConnection cnx = new SqlConnection(cnxString))
                {
                    cnx.Open();

                    foreach (Contremarque cm in entry.Value)
                    {
                        if (cm.IsCommentaire || cm.IsRemarqueInterne)
                        {
                            continue;
                        }

                        using (SqlCommand cmd = cnx.CreateCommand())
                        {
                            cmd.CommandText = @"INSERT INTO F_CMLIEN(DL_NoOut, DL_NoIn, CM_Qte) 
                                                    VALUES(@dlNoOut, (SELECT DL_No FROM F_DOCLIGNE WHERE DO_Ref = @dlNoOut AND DO_Piece = @doPiece), @cmQte)";
                            cmd.Parameters.AddWithValue("@dlNoOut", cm.DlNo.ToString());
                            cmd.Parameters.AddWithValue("@doPiece", docAEntete.DO_Piece);
                            cmd.Parameters.AddWithValue("@cmQte", Convert.ToDouble(cm.Qte, CultureInfo.CurrentCulture));
                            cmd.ExecuteNonQuery();
                        }
                    }

                    // Maj les NumPiece du doc achat
                    using (SqlCommand cmd = cnx.CreateCommand())
                    {
                        cmd.CommandText = "UPDATE F_DOCLIGNE SET DO_Ref = NULL, NumPiece = dbo.GET_CM_PIECE(DL_No) WHERE DO_Piece = @doPiece";
                        cmd.Parameters.AddWithValue("@doPiece", docAEntete.DO_Piece);
                        cmd.ExecuteNonQuery();
                    }

                    // Si c'est une commande intermag on envoie en intermag
                    if (entry.Value[0].IsInterMag)
                    {
                        // TODO A surveiller, reload le doc depuis la base car erreur Accès refusé
                        var docAchat = (IBODocumentAchat3)GetDocument(docAEntete.DO_Piece);
                        docAchat.DO_Statut = DocumentStatutType.DocumentStatutTypeSaisie;
                        docAchat.Write();

                        if (disableIntermag)
                        {
                            Log("La commande ne sera pas envoyée par intermag");
                        }
                        else
                        {
                            Log("Envoi de la commande intermag");

                            InterMagRepository imRepos = new InterMagRepository();
                            imRepos.Log += new InterMagRepository.LogEventHandler(Log);
                            imRepos.sendSqlCde(imRepos.getCommande(docAEntete.DO_Piece), entry.Value[0].SelectedFourn);
                        }
                    }
                }
                Log("------");
            } // endforeach dict

            // Maj les numPieces du doc vente
            using (var cnx = new SqlConnection(cnxString))
            {
                cnx.Open();
                using (var cmd = cnx.CreateCommand())
                {
                    cmd.CommandText = "UPDATE F_DOCLIGNE SET DO_Ref = NULL, NumPiece = dbo.GET_CM_PIECE(DL_No) WHERE DO_Piece = @doPiece";
                    cmd.Parameters.AddWithValue("@doPiece", docV.DO_Piece);
                    cmd.ExecuteNonQuery();
                }
            }
            #endregion Ajout contremarque
        }
コード例 #8
0
        /// <summary>
        /// Cde Retro: Duplique le bon de commande fournisseur en cde magasin
        /// </summary>
        /// <param name="docOrigin"></param>
        /// <param name="magPieces"></param>
        /// <param name="targetDb"></param>
        private void editCommandeRetro(IBODocumentAchat3 docOrigin, string magPieces, string targetDb)
        {
            try
            {
                // Commande RETRO
                IBOFournisseur3 fourn;

                using (SqlConnection cnx = new SqlConnection(cnxString))
                {
                    cnx.Open();
                    using (SqlCommand cmd = cnx.CreateCommand())
                    {
                        cmd.CommandText =
                            "SELECT CT_Num FROM F_COMPTET WHERE CT_Classement = @ctClassement AND CT_Type = 1";
                        cmd.Parameters.AddWithValue("@ctClassement", targetDb);
                        using (SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.SingleRow))
                        {
                            if (reader.HasRows)
                            {
                                reader.Read();
                                fourn = GetInstance().CptaApplication.FactoryFournisseur.ReadNumero(reader["CT_Num"].ToString());
                            }
                            else
                            {
                                throw new Exception($"Fournisseur '{targetDb}' non trouvé");
                            }
                        }
                    }
                }

                // Duplication du doc d'origine en document d'achat magasin
                IPMDocument       procDoc = GetInstance().CreateProcess_Document(DocumentType.DocumentTypeAchatCommandeConf);
                IBODocumentAchat3 docNew  = (IBODocumentAchat3)procDoc.Document;

                docNew.SetDefaultDO_Piece();
                docNew.DO_Statut = DocumentStatutType.DocumentStatutTypeConfirme;
                docNew.DO_Ref    = magPieces;
                docNew.SetDefaultFournisseur(fourn);
                docNew.Collaborateur = docOrigin.Collaborateur;

                IBODocumentAchatLigne3 docNewLigne;

                foreach (IBODocumentAchatLigne3 docOrigineLigne in docOrigin.FactoryDocumentLigne.List)
                {
                    if (docOrigineLigne.Article == null)
                    {
                        // Ligne de commentaire
                        docNewLigne           = (IBODocumentAchatLigne3)docNew.FactoryDocumentLigne.Create();
                        docNewLigne.DL_Design = docOrigineLigne.DL_Design;
                        docNewLigne.Write();
                    }
                    else
                    {
                        docNewLigne = (IBODocumentAchatLigne3)addArticleFromLigne(procDoc, docOrigineLigne, docOrigineLigne.DL_Qte);
                        docNewLigne.AF_RefFourniss  = docOrigineLigne.AF_RefFourniss;
                        docNewLigne.Taxe[0]         = GetInstance().CptaApplication.FactoryTaxe.ReadCode("8");
                        docNewLigne.DL_PrixUnitaire = docOrigineLigne.DL_MontantHT / docOrigineLigne.DL_Qte;
                        docNewLigne.SetDefaultRemise();
                        docNewLigne.DO_Ref            = docOrigineLigne.InfoLibre["DLNo"];
                        docNewLigne.TxtComplementaire = docOrigineLigne.TxtComplementaire;
                        docNewLigne.DL_Design         = docOrigineLigne.DL_Design;
                        docNewLigne.Write();
                    }
                }

                if (procDoc.CanProcess)
                {
                    procDoc.Process();

                    foreach (IBODocumentAchatLigne3 ligne in GetDocument(docNew.DO_Piece).FactoryDocumentLigne.List)
                    {
                        if (ligne.Article != null && (ligne.Article.AR_Ref == "DIVERS" || ligne.Article.Famille.FA_CodeFamille == "UNIQUE"))
                        {
                            new DiversRepository().saveLigneAchat(ligne);
                        }
                    }

                    using (SqlConnection cnx = new SqlConnection(cnxString))
                    {
                        cnx.Open();
                        // Met à jour les infos libres
                        using (SqlCommand cmd = cnx.CreateCommand())
                        {
                            cmd.CommandText = @"UPDATE F_DOCENTETE 
                                                SET [Date Statut] = GETDATE(), [RETRO_FOURN] = @retroFourn 
                                                WHERE DO_Piece = @doPiece";
                            cmd.Parameters.AddWithValue("@doPiece", docNew.DO_Piece);
                            cmd.Parameters.AddWithValue("@retroFourn", docOrigin.Fournisseur.CT_Num);
                            cmd.ExecuteNonQuery();
                        }
                    }

                    docNew.Refresh();
                }
                else
                {
                    throw new Exception(GetProcessError(procDoc));
                }

                // Met à jour la référence du doc origine
                docOrigin.DO_Ref    = $"Voir {docNew.DO_Piece}";
                docOrigin.DO_Statut = DocumentStatutType.DocumentStatutTypeConfirme;
                docOrigin.Write();

                // Contremarque
                using (SqlConnection cnx = new SqlConnection(cnxString))
                {
                    cnx.Open();
                    SqlTransaction transaction = cnx.BeginTransaction();

                    try
                    {
                        using (SqlCommand cmd = cnx.CreateCommand())
                        {
                            cmd.Transaction = transaction;
                            // Recup les lignes du doc d'origine
                            cmd.CommandText = @"SELECT CM.DL_NoIn, CM.DL_NoOut, CM_Qte
                                                FROM F_CMLIEN CM
                                                JOIN F_DOCLIGNE DL ON DL.DL_No = CM.DL_NoIn
                                                WHERE DL.DO_PIECE = @doPiece  ";
                            cmd.Parameters.AddWithValue("@doPiece", docOrigin.DO_Piece);

                            using (SqlDataReader reader = cmd.ExecuteReader())
                            {
                                if (reader.HasRows)
                                {
                                    // Y a de la contremarque sur le doc
                                    while (reader.Read())
                                    {
                                        int dlNoIn = (int)reader["DL_NoIn"];
                                        using (SqlCommand cmd3 = cnx.CreateCommand())
                                        {
                                            cmd3.Transaction = transaction;
                                            cmd3.CommandText =
                                                "UPDATE F_CMLIEN SET DL_NoIn = (SELECT DL_No FROM F_DOCLIGNE WHERE DO_Ref = @dlNoIn) WHERE DL_NoIn = @dlNoIn";
                                            cmd3.Parameters.AddWithValue("@dlNoIn", dlNoIn.ToString());
                                            cmd3.ExecuteNonQuery();
                                        }

                                        // On remplace DO_Ref par sa valeur réelle
                                        using (SqlCommand cmdUpd = cnx.CreateCommand())
                                        {
                                            cmdUpd.Transaction = transaction;
                                            cmdUpd.CommandText = "UPDATE F_DOCLIGNE SET DO_Ref = @doRef WHERE DO_Ref = @uid";
                                            cmdUpd.Parameters.AddWithValue("@doRef", magPieces);
                                            cmdUpd.Parameters.AddWithValue("@uid", docOrigin.DO_Piece + dlNoIn);
                                            cmdUpd.ExecuteNonQuery();
                                        }
                                    }
                                }
                            }

                            transaction.Commit();
                        }
                    }
                    catch (Exception e)
                    {
                        transaction.Rollback();
                        throw new Exception(e.ToString());
                    }
                }

                Log($"{dbName} :: Doc Achat {docOrigin.DO_Piece} dupliqué vers le doc achat {docNew.DO_Piece}");

                // Met à jour la commande distante
                IntermagServiceClient client = createClient(targetDb);
                client.SetDoRef(docNew.DO_Piece, targetDb, magPieces.Split('/')[0]);
                client.Close();

                // Suppression du document fournisseur d'origine
                if (MessageBox.Show(
                        "Souhaitez-vous supprimer le document fournisseur d'origine?",
                        "Suppression doc origine",
                        MessageBoxButtons.YesNo) == DialogResult.Yes)
                {
                    docOrigin.Remove();
                }
                else
                {
                    Log($"Vous devrez supprimer le document d'achat n° {docOrigin.DO_Piece} manuellement.");
                    // Dévérouille le doc
                    docOrigin.Read();
                }
            }
            catch (Exception e)
            {
                throw new Exception(e.ToString());
            }
        }
コード例 #9
0
        /// <summary>
        /// Cde dépot: Met à jour les prix, statut ...
        /// </summary>
        /// <param name="docAOrigin"></param>
        /// <param name="magPiece"></param>
        private void editCommandeDepot(IBODocumentAchat3 docAOrigin, string magPiece)
        {
            try
            {
                // Commande Dépôt
                docAOrigin.DO_Ref    = magPiece;
                docAOrigin.DO_Statut = DocumentStatutType.DocumentStatutTypeConfirme;
                //docAOrigin.InfoLibre["Date Statut"] = DateTime.Now;
                docAOrigin.Write();

                using (SqlConnection cnx = new SqlConnection(cnxString))
                {
                    cnx.Open();
                    using (SqlCommand cmd = cnx.CreateCommand())
                    {
                        cmd.CommandText = "UPDATE F_DOCENTETE SET [Date Statut] = GETDATE() WHERE DO_Piece = @doPiece";
                        cmd.Parameters.AddWithValue("@doPiece", docAOrigin.DO_Piece);

                        cmd.ExecuteNonQuery();
                    }
                }

                docAOrigin.Refresh();

                // Simule une commande client Tarif 6 pour recup les prix remisés
                // et les appliquer au doc d'achat
                IPMDocument       procDocV   = GetInstance().CreateProcess_Document(DocumentType.DocumentTypeVenteCommande);
                IBODocumentVente3 docVEntete = (IBODocumentVente3)procDocV.Document;

                docVEntete.SetDefaultClient(GetInstance().CptaApplication.FactoryClient.ReadNumero("DEVEL"));
                docVEntete.CategorieTarif = GetInstance().FactoryCategorieTarif.ReadIntitule("Tarif Article N° 6");

                IBODocumentVenteLigne3 docVLigne;
                foreach (IBODocumentAchatLigne3 ligneOrigin in docAOrigin.FactoryDocumentLigne.List)
                {
                    if (ligneOrigin.Article != null)
                    {
                        Debug.Print(ligneOrigin.Article.AR_Ref);
                        docVLigne = (IBODocumentVenteLigne3)docVEntete.FactoryDocumentLigne.Create();
                        IBOArticle3 a   = ligneOrigin.Article;
                        double      qte = ligneOrigin.DL_Qte;
                        docVLigne.SetDefaultArticle(a, qte);
                        docVLigne.SetDefaultRemise();

                        ligneOrigin.DL_PrixUnitaire = docVLigne.DL_PrixUnitaire;
                        ligneOrigin.Remise.FromString(docVLigne.Remise.ToString());
                        ligneOrigin.DO_Ref = magPiece;
                        ligneOrigin.Write();

                        if (ligneOrigin.Article.AR_Ref == "DIVERS" || ligneOrigin.Article.Famille.FA_CodeFamille == "UNIQUE")
                        {
                            new DiversRepository().saveLigneAchat(ligneOrigin);
                        }
                    }
                }

                // Déverrouille le doc
                docAOrigin.Read();
            }
            catch (Exception e)
            {
                throw new Exception(e.ToString());
            }
        }