示例#1
0
 private void ShowDetail()
 {
     if (m_panelListe.ElementSelectionne is CVersionDonneesObjet)
     {
         CVersionDonneesObjet version = (CVersionDonneesObjet)m_panelListe.ElementSelectionne;
         CFormDetailVersion.ShowDetail(m_objet, version.VersionDonnees);
     }
 }
示例#2
0
        //----------------------------------------------------------
        public CResultAErreur AnnuleModificationPrevisionnelle(CVersionDonneesObjet versionObjet)
        {
            CContexteDonnee contexte    = versionObjet.ContexteDonnee;
            CResultAErreur  result      = CResultAErreur.True;
            int             nIdObjet    = versionObjet.IdElement;
            Type            typeObjet   = versionObjet.TypeElement;
            CVersionDonnees versionPrev = versionObjet.VersionDonnees;
            int             nIdVersion  = versionPrev.Id;

            //Vérifie que l'utilisateur peut travailler avec cette version
            result = versionPrev.EnregistreEvenement(CVersionDonnees.c_eventBeforeUtiliser, true);
            if (!result)
            {
                return(result);
            }
            contexte.SetVersionDeTravail(-1, false);



            //Suppression de l'objet associé
            string strPrimKey            = contexte.GetTableSafe(CContexteDonnee.GetNomTableForType(typeObjet)).PrimaryKey[0].ColumnName;
            CListeObjetsDonnees listeTmp = new CListeObjetsDonnees(contexte, typeObjet);

            listeTmp.Filtre = new CFiltreData(
                CSc2iDataConst.c_champIdVersion + "=@1 and " +
                "(" + CSc2iDataConst.c_champOriginalId + "=@2 or " +
                strPrimKey + "=@2)",
                nIdVersion,
                nIdObjet);
            listeTmp.Filtre.IgnorerVersionDeContexte = true;
            result = CObjetDonneeAIdNumerique.Delete(listeTmp);
            if (!result)
            {
                return(result);
            }

            //Suppression de la version objet
            result = versionObjet.Delete();
            if (!result)
            {
                return(result);
            }

            //Force la modification de l'objet pour mettre à jour les versions suivantes
            CObjetDonneeAIdNumerique objet = (CObjetDonneeAIdNumerique)Activator.CreateInstance(typeObjet, new object[] { contexte });

            if (objet.ReadIfExists(nIdObjet))
            {
                //Passe dans la version de l'objet
                result = contexte.SetVersionDeTravail(objet.IdVersionDatabase, false);
                if (!result)
                {
                    return(result);
                }
                objet.Row.Row.SetModified();
            }
            return(result);
        }
示例#3
0
        //-------------------------------------------------------------------------------
        public override CResultAErreur SaveAll(CContexteSauvegardeObjetsDonnees contexteSauvegarde, DataRowState etatsAPrendreEnCompte)
        {
            CResultAErreur result = CResultAErreur.True;
            DataTable      table  = contexteSauvegarde.ContexteDonnee.Tables[GetNomTable()];

            if (table != null)
            {
                ArrayList lstRows = new ArrayList(table.Rows);
                foreach (DataRow row in lstRows)
                {
                    if (row.RowState == DataRowState.Modified)
                    {
                        CVersionDonneesObjet version = new CVersionDonneesObjet(row);
                        version.CancelCreate();
                    }
                    if (row.RowState == DataRowState.Added || row.RowState == DataRowState.Modified)
                    {
                        CVersionDonneesObjet versionObjet = new CVersionDonneesObjet(row);
                        if (versionObjet.CodeTypeOperation == (int)CTypeOperationSurObjet.TypeOperation.Ajout ||
                            versionObjet.CodeTypeOperation == (int)CTypeOperationSurObjet.TypeOperation.Suppression)
                        {
                            CListeObjetsDonnees datas = versionObjet.ToutesLesOperations;

                            /*CListeObjetsDonnees datas = new CListeObjetsDonnees(versionObjet.ContexteDonnee, typeof(CVersionDonneesObjetOperation));
                             * datas.Filtre = new CFiltreData(CVersionDonneesObjet.c_champId + "=@1 and " +
                             *      CVersionDonneesObjetOperation.c_champOperation += "@2",
                             *      versionObjet.Id,
                             *      (int)versionObjet.CodeTypeOperation);
                             * datas.InterditLectureInDB = true;*/
                            datas.Filtre = new CFiltreData(CVersionDonneesObjetOperation.c_champOperation + "=@1",
                                                           versionObjet.CodeTypeOperation);
                            if (datas.Count == 0)
                            {
                                //Création du data. pour les ajouts et les suppressions,
                                //il doit y avoir un data indiquant l'opération
                                CVersionDonneesObjetOperation data = new CVersionDonneesObjetOperation(contexteSauvegarde.ContexteDonnee);
                                data.CreateNewInCurrentContexte();
                                data.VersionObjet      = versionObjet;
                                data.CodeTypeOperation = versionObjet.CodeTypeOperation;
                                data.Champ             = null;
                            }
                        }
                    }
                }
            }
            return(base.SaveAll(contexteSauvegarde, etatsAPrendreEnCompte));
        }
示例#4
0
        //-------------------------------------------------------------------------------
        public override CResultAErreur TraitementAvantSauvegarde(CContexteDonnee contexte)
        {
            CResultAErreur result = base.TraitementAvantSauvegarde(contexte);

            if (!result)
            {
                return(result);
            }
            DataTable table = contexte.Tables[GetNomTable()];

            if (table != null)
            {
                ArrayList lstRows = new ArrayList(table.Rows);
                foreach (DataRow row in lstRows)
                {
                    if (row.RowState == DataRowState.Added || row.RowState == DataRowState.Modified)
                    {
                        CVersionDonneesObjet versionObjet = new CVersionDonneesObjet(row);
                        if (versionObjet.CodeTypeOperation == (int)CTypeOperationSurObjet.TypeOperation.Ajout ||
                            versionObjet.CodeTypeOperation == (int)CTypeOperationSurObjet.TypeOperation.Suppression)
                        {
                            CListeObjetsDonnees datas = versionObjet.Modifications;
                            datas.Filtre = new CFiltreData(CVersionDonneesObjetOperation.c_champOperation + "=@1",
                                                           versionObjet.CodeTypeOperation);
                            if (datas.Count == 0)
                            {
                                //Création du data. pour les ajouts et les suppressions,
                                //il doit y avoir un data indiquant l'opération
                                CVersionDonneesObjetOperation data = new CVersionDonneesObjetOperation(contexte);
                                data.CreateNewInCurrentContexte();
                                data.VersionObjet      = versionObjet;
                                data.CodeTypeOperation = versionObjet.CodeTypeOperation;
                                data.Champ             = null;
                            }
                        }
                    }
                }
            }
            return(result);
        }
示例#5
0
        //-------------------------------------------------------------------------------
        //Annule les modifications réalisées sur l'objet
        public CResultAErreur AnnuleModificationsPrevisionnelles(int nIdVersionObjet)
        {
            CResultAErreur result = CResultAErreur.True;

            using (CContexteDonnee contexte = new CContexteDonnee(IdSession, true, false))
            {
                CSessionClient session = CSessionClient.GetSessionForIdSession(IdSession);
                result = session.BeginTrans();
                if (!result)
                {
                    return(result);
                }
                CVersionDonneesObjet versionObjet = new CVersionDonneesObjet(contexte);
                if (!versionObjet.ReadIfExists(nIdVersionObjet))
                {
                    return(result);                   //Rien à annuler
                }
                CVersionDonnees versionPrev = versionObjet.VersionDonnees;
                if (versionPrev.TypeVersion.Code != CTypeVersion.TypeVersion.Previsionnelle)
                {
                    result.EmpileErreur(I.T("Cannot cancel archive operation|220"));
                    return(result);
                }
                result = AnnuleModificationPrevisionnelle(versionObjet);
                if (result)
                {
                    result = contexte.SaveAll(true);
                    if (result)
                    {
                        result = session.CommitTrans();
                    }
                    else
                    {
                        result = session.RollbackTrans();
                    }
                }
            }
            return(result);
        }
示例#6
0
        //-------------------------------------------------------------------------
        public CVersionDonneesObjet JournaliseDonnees(System.Data.DataRow row, CVersionDonnees version)
        {
            if (row.RowState == DataRowState.Modified ||
                row.RowState == DataRowState.Added ||
                row.RowState == DataRowState.Deleted)
            {
                Type tp = CContexteDonnee.GetTypeForTable(row.Table.TableName);
                if (!typeof(CRelationElementAChamp_ChampCustom).IsAssignableFrom(tp))
                {
                    return(null);
                }
                //Récupère l'objet associé
                DataRowVersion rowVersion = DataRowVersion.Current;
                if (row.RowState == DataRowState.Deleted)
                {
                    if (row.HasVersion(DataRowVersion.Original))
                    {
                        rowVersion = DataRowVersion.Original;
                    }
                    else
                    {
                        return(null);
                    }
                }
                CRelationElementAChamp_ChampCustom rel = (CRelationElementAChamp_ChampCustom)Activator.CreateInstance(tp, new object[] { row });
                rel.VersionToReturn = rowVersion;
                try
                {
                    IElementAChamps objet = rel.ElementAChamps;
                    //Si l'objet est ajouté, on n'archive pas !
                    if (objet is CObjetDonneeAIdNumerique &&
                        ((CObjetDonneeAIdNumerique)objet).Row.RowState != DataRowState.Added)
                    {
                        CObjetDonneeAIdNumerique objetAId = (CObjetDonneeAIdNumerique)objet;
                        if (objetAId != null)
                        {
                            //Récupère un version pour l'objet
                            CVersionDonneesObjet versionObjet = version.GetVersionObjetAvecCreation(objetAId.Row.Row);
                            if (versionObjet == null)
                            {
                                return(null);
                            }

                            //Stef 14082008 : en cas d'ajout, on ne fait rien. le datarow de l'objet n'est pas added
                            //car l'objet a déjà été sauvé quand on passe par là !
                            if (versionObjet.CodeTypeOperation == (int)CTypeOperationSurObjet.TypeOperation.Ajout)
                            {
                                return(null);
                            }

                            new CJournaliseurValeurChampCustom().JournaliseDonneeInContexte(versionObjet, rel.ChampCustom, row);
                            return(versionObjet);
                        }
                    }
                }
                catch
                {
                    return(null);
                }
            }
            return(null);
        }
示例#7
0
        //----------------------------------
        public CResultAErreur FillFromVersion(CVersionDonneesObjet vo, CContexteDonnee contexteEnVersion, Dictionary <CObjetDonneeAIdNumerique, CMacroObjet> dicObjetToMacro)
        {
            CStructureTable structure = CStructureTable.GetStructure(vo.TypeElement);

            List <CDefinitionProprieteDynamique> lstChampsDotNet = new List <CDefinitionProprieteDynamique>();

            lstChampsDotNet.AddRange(new CFournisseurProprietesDynamiqueDynamicField().GetDefinitionsChamps(vo.TypeElement, null));
            List <CDefinitionProprieteDynamique> lstChampsCustom = new List <CDefinitionProprieteDynamique>();

            lstChampsCustom.AddRange(new CFournisseurProprietesDynamiqueChampCustom().GetDefinitionsChamps(vo.TypeElement, null));
            CResultAErreur           result = CResultAErreur.True;
            CObjetDonneeAIdNumerique objet  = Activator.CreateInstance(vo.TypeElement, new object[] { contexteEnVersion }) as CObjetDonneeAIdNumerique;

            if (!objet.ReadIfExists(vo.IdElement))
            {
                objet = null;
            }
            else
            {
                DesignationObjet = objet.DescriptionElement;
            }
            switch (vo.TypeOperation.Code)
            {
            case CTypeOperationSurObjet.TypeOperation.Ajout:
                if (objet != null && objet.IsValide())
                {
                    foreach (CDefinitionProprieteDynamique def in lstChampsDotNet)
                    {
                        string strNom = def.NomProprieteSansCleTypeChamp;
                        if (strNom != "IsDeleted" && strNom != "Id" &&
                            strNom != "ContexteDeModification" && strNom != "IdVersionDatabase")
                        {
                            bool bAdd = !def.IsReadOnly;
                            if (def.IsReadOnly)
                            {
                                //Si readonly mais a l'attribut ForceSetOnMacro, on l'ajoute quand même
                                PropertyInfo info = vo.TypeElement.GetProperty(strNom);
                                if (info != null && info.GetCustomAttributes(typeof(TiagRelationAttribute), true).Length != 0)
                                {
                                    bAdd = true;
                                }
                            }
                            if (bAdd)
                            {
                                CResultAErreur resultVal = CInterpreteurProprieteDynamique.GetValue(objet, def);
                                if (resultVal)
                                {
                                    object            data = resultVal.Data;
                                    CMacroObjetValeur mv   = new CMacroObjetValeur(this);
                                    mv.Champ = def;
                                    if (FillMacroValeurWithValue(mv, data, dicObjetToMacro))
                                    {
                                        AddValeur(mv);
                                    }
                                    else
                                    {
                                        result.EmpileErreur(new CErreurValidation(I.T("#Can not use field @1 of type @2 in macro", def.Nom,
                                                                                      DynamicClassAttribute.GetNomConvivial(vo.TypeElement)), true));
                                    }
                                }
                            }
                        }
                    }
                    if (objet is IObjetDonneeAChamps)
                    {
                        foreach (CRelationElementAChamp_ChampCustom rel in ((IObjetDonneeAChamps)objet).RelationsChampsCustom)
                        {
                            object data = rel.Valeur;
                            if (data != null)
                            {
                                CDefinitionProprieteDynamique defCust = lstChampsCustom.FirstOrDefault(c => ((CDefinitionProprieteDynamiqueChampCustom)c).DbKeyChamp == rel.ChampCustom.DbKey);
                                if (defCust != null)
                                {
                                    CMacroObjetValeur mv = new CMacroObjetValeur(this);
                                    mv.Champ = defCust;
                                    mv.Champ = defCust;
                                    if (FillMacroValeurWithValue(mv, data, dicObjetToMacro))
                                    {
                                        this.AddValeur(mv);
                                    }
                                    else
                                    {
                                        result.EmpileErreur(new CErreurValidation(I.T("#Can not use field @1 of type @2 in macro", rel.ChampCustom.Nom,
                                                                                      DynamicClassAttribute.GetNomConvivial(vo.TypeElement)), true));
                                    }
                                }
                            }
                        }
                    }
                }

                break;

            case CTypeOperationSurObjet.TypeOperation.Suppression:
                break;

            case CTypeOperationSurObjet.TypeOperation.Modification:
                CStructureTable structureObjet = CStructureTable.GetStructure(vo.TypeElement);
                foreach (CVersionDonneesObjetOperation valeur in vo.ToutesLesOperations)
                {
                    CDefinitionProprieteDynamique def   = null;
                    IChampPourVersion             champ = valeur.Champ;
                    if (champ is CChampPourVersionInDb)
                    {
                        string          strNomChamp = ((CChampPourVersionInDb)champ).NomPropriete;
                        CInfoChampTable infoChamp   = structureObjet.Champs.FirstOrDefault(c => c.NomChamp == strNomChamp);
                        if (infoChamp != null && infoChamp.NomChamp != CSc2iDataConst.c_champIdVersion &&
                            infoChamp.NomChamp != CSc2iDataConst.c_champIsDeleted &&
                            infoChamp.NomChamp != CObjetDonnee.c_champContexteModification)
                        {
                            string strNomPropriete = infoChamp.Propriete;
                            def = lstChampsDotNet.FirstOrDefault(c => c.NomProprieteSansCleTypeChamp == strNomPropriete);
                        }
                        if (def == null)
                        {
                            CInfoRelation relation = structureObjet.RelationsParentes.FirstOrDefault(i => i.ChampsFille.Length == 1 && i.ChampsFille[0] == strNomChamp);
                            if (relation != null)
                            {
                                def = lstChampsDotNet.FirstOrDefault(c => c.NomProprieteSansCleTypeChamp == relation.Propriete);
                            }
                        }
                    }
                    else if (champ is CChampCustomPourVersion)
                    {
                        CChampCustom champCustom = ((CChampCustomPourVersion)champ).ChampCustom;
                        if (champCustom != null)
                        {
                            def = lstChampsCustom.FirstOrDefault(c => c is CDefinitionProprieteDynamiqueChampCustom &&
                                                                 ((CDefinitionProprieteDynamiqueChampCustom)c).DbKeyChamp == champCustom.DbKey);
                        }
                    }
                    if (def != null)
                    {
                        bool bAdd = !def.IsReadOnly;
                        if (def.IsReadOnly)
                        {
                            //Si readonly mais a l'attribut TiagRelation, on l'ajoute quand même
                            PropertyInfo info = vo.TypeElement.GetProperty(def.NomProprieteSansCleTypeChamp);
                            if (info != null && info.GetCustomAttributes(typeof(TiagRelationAttribute), true).Length > 0)
                            {
                                bAdd = true;
                            }
                        }
                        if (bAdd)
                        {
                            CMacroObjetValeur mv = new CMacroObjetValeur(this);
                            mv.Champ = def;
                            object val = valeur.GetValeur();
                            if (val != null && typeof(CObjetDonneeAIdNumerique).IsAssignableFrom(def.TypeDonnee.TypeDotNetNatif) && valeur.TypeValeur == typeof(int))
                            {
                                CObjetDonneeAIdNumerique objetParent = Activator.CreateInstance(def.TypeDonnee.TypeDotNetNatif, new object[] { objet.ContexteDonnee }) as CObjetDonneeAIdNumerique;
                                if (objetParent.ReadIfExists((int)valeur.GetValeur()))
                                {
                                    val = objetParent;
                                }
                                else
                                {
                                    val = null;
                                }
                            }

                            if (!FillMacroValeurWithValue(mv, val, dicObjetToMacro))
                            {
                                result.EmpileErreur(new CErreurValidation(I.T("#Can not use field @1 of @2 in macro", valeur.NomChampConvivial,
                                                                              DynamicClassAttribute.GetNomConvivial(vo.TypeElement)), true));
                            }
                            else
                            {
                                AddValeur(mv);
                            }
                        }
                    }
                }
                break;
            }
            if (Valeurs.Count() == 0)
            {
                TypeOperation = new CTypeOperationSurObjet(CTypeOperationSurObjet.TypeOperation.Aucune);
            }
            return(result);
        }
示例#8
0
        //----------------------------------
        public CResultAErreur FillFromVersion(CVersionDonneesObjet vo, CContexteDonnee contexteEnVersion, Dictionary <CObjetDonneeAIdNumerique, CMacroObjet> dicObjetToMacro)
        {
            List <CDefinitionProprieteDynamique> lstChampsDotNet = new List <CDefinitionProprieteDynamique>();

            lstChampsDotNet.AddRange(new CFournisseurProprietesDynamiqueDynamicField().GetDefinitionsChamps(vo.TypeElement, null));
            List <CDefinitionProprieteDynamique> lstChampsCustom = new List <CDefinitionProprieteDynamique>();

            lstChampsCustom.AddRange(new CFournisseurProprietesDynamiqueChampCustom().GetDefinitionsChamps(vo.TypeElement, null));
            CResultAErreur           result = CResultAErreur.True;
            CObjetDonneeAIdNumerique objet  = Activator.CreateInstance(vo.TypeElement, new object[] { contexteEnVersion }) as CObjetDonneeAIdNumerique;

            if (!objet.ReadIfExists(vo.IdElement))
            {
                objet = null;
            }
            else
            {
                DesignationObjet = objet.DescriptionElement;
            }
            switch (vo.TypeOperation.Code)
            {
            case CTypeOperationSurObjet.TypeOperation.Ajout:
                if (objet != null && objet.IsValide())
                {
                    foreach (CDefinitionProprieteDynamique def in lstChampsDotNet)
                    {
                        string strNom = def.NomProprieteSansCleTypeChamp;
                        if (!def.IsReadOnly && strNom != "IsDeleted" && strNom != "Id" &&
                            strNom != "ContexteDeModification" && strNom != "IdVersionDatabase")
                        {
                            CResultAErreur resultVal = CInterpreteurProprieteDynamique.GetValue(objet, def);
                            if (resultVal)
                            {
                                object            data = resultVal.Data;
                                CMacroObjetValeur mv   = new CMacroObjetValeur(this);
                                mv.Champ = def;
                                if (FillMacroValeurWithValue(mv, data, dicObjetToMacro))
                                {
                                    AddValeur(mv);
                                }
                                else
                                {
                                    result.EmpileErreur(new CErreurValidation(I.T("Can not use field @1 in macro|20052", def.Nom), true));
                                }
                            }
                        }
                    }
                    if (objet is CElementAChamp)
                    {
                        foreach (CRelationElementAChamp_ChampCustom rel in ((CElementAChamp)objet).RelationsChampsCustom)
                        {
                            object data = rel.Valeur;
                            if (data != null)
                            {
                                CDefinitionProprieteDynamique defCust = lstChampsCustom.FirstOrDefault(c => ((CDefinitionProprieteDynamiqueChampCustom)c).IdChamp == rel.ChampCustom.Id);
                                if (defCust != null)
                                {
                                    CMacroObjetValeur mv = new CMacroObjetValeur(this);
                                    mv.Champ = defCust;
                                    mv.Champ = defCust;
                                    this.AddValeur(mv);
                                    if (FillMacroValeurWithValue(mv, data, dicObjetToMacro))
                                    {
                                        this.AddValeur(mv);
                                    }
                                    else
                                    {
                                        result.EmpileErreur(new CErreurValidation(I.T("Can not use field @1 in macro|20052", rel.ChampCustom.Nom), true));
                                    }
                                }
                            }
                        }
                    }
                }

                break;

            case CTypeOperationSurObjet.TypeOperation.Suppression:
                break;

            case CTypeOperationSurObjet.TypeOperation.Modification:
                CStructureTable structureObjet = CStructureTable.GetStructure(vo.TypeElement);
                foreach (CVersionDonneesObjetOperation valeur in vo.ToutesLesOperations)
                {
                    CDefinitionProprieteDynamique def   = null;
                    IChampPourVersion             champ = valeur.Champ;
                    if (champ is CChampPourVersionInDb)
                    {
                        string          strNomChamp = ((CChampPourVersionInDb)champ).NomPropriete;
                        CInfoChampTable infoChamp   = structureObjet.Champs.FirstOrDefault(c => c.NomChamp == strNomChamp);
                        if (infoChamp != null && infoChamp.NomChamp != CSc2iDataConst.c_champIdVersion &&
                            infoChamp.NomChamp != CSc2iDataConst.c_champIsDeleted &&
                            infoChamp.NomChamp != CObjetDonnee.c_champContexteModification)
                        {
                            string strNomPropriete = infoChamp.Propriete;
                            def = lstChampsDotNet.FirstOrDefault(c => c.NomProprieteSansCleTypeChamp == strNomPropriete);
                        }
                    }
                    else if (champ is CChampCustomPourVersion)
                    {
                        CChampCustom champCustom = ((CChampCustomPourVersion)champ).ChampCustom;
                        if (champCustom != null)
                        {
                            def = lstChampsCustom.FirstOrDefault(c => c is CDefinitionProprieteDynamiqueChampCustom &&
                                                                 ((CDefinitionProprieteDynamiqueChampCustom)c).IdChamp == champCustom.Id);
                        }
                    }
                    if (def != null && !def.IsReadOnly)
                    {
                        CMacroObjetValeur mv = new CMacroObjetValeur(this);
                        mv.Champ = def;
                        if (!FillMacroValeurWithValue(mv, valeur.GetValeur(), dicObjetToMacro))
                        {
                            result.EmpileErreur(new CErreurValidation(I.T("Can not use field @1 in macro|20052", valeur.NomChampConvivial), true));
                        }
                        else
                        {
                            AddValeur(mv);
                        }
                    }
                }
                break;
            }
            if (Valeurs.Count() == 0)
            {
                TypeOperation = new CTypeOperationSurObjet(CTypeOperationSurObjet.TypeOperation.Aucune);
            }
            return(result);
        }
        //---------------------------------------------------------------
        public CVersionDonneesObjetOperation JournaliseDonneeInContexte(CVersionDonneesObjet version, CChampCustom champ, DataRow row)
        {
            if (row.RowState != DataRowState.Modified && row.RowState != DataRowState.Added && row.RowState != DataRowState.Deleted)
            {
                return(null);
            }
            Type tp = CContexteDonnee.GetTypeForTable(row.Table.TableName);

            if (!typeof(CRelationElementAChamp_ChampCustom).IsAssignableFrom(tp))
            {
                return(null);
            }
            CRelationElementAChamp_ChampCustom rel = (CRelationElementAChamp_ChampCustom)Activator.CreateInstance(tp, new object[] { row });
            object valeurAvant = DBNull.Value;
            object valeurApres = DBNull.Value;

            if (champ.TypeDonneeChamp.TypeDonnee == TypeDonnee.tObjetDonneeAIdNumeriqueAuto)
            {
                if (row.HasVersion(DataRowVersion.Original))
                {
                    rel.VersionToReturn = DataRowVersion.Original;
                    valeurAvant         = rel.ValeurInt;
                    rel.VersionToReturn = DataRowVersion.Current;
                }
                if (row.HasVersion(DataRowVersion.Current))
                {
                    valeurApres = rel.ValeurInt;
                }
            }
            else
            {
                valeurAvant = DBNull.Value;
                if (row.HasVersion(DataRowVersion.Original))
                {
                    rel.VersionToReturn = DataRowVersion.Original;
                    valeurAvant         = rel.Valeur;
                    rel.VersionToReturn = DataRowVersion.Current;
                }
                if (row.HasVersion(DataRowVersion.Current))
                {
                    valeurApres = rel.Valeur;
                }
            }

            CVersionDonneesObjetOperation verData = null;
            ///Stef optim 13082008 : ne passe plus par une liste pour trouver l'objet
            //Ancien code

            /*
             * CListeObjetsDonnees datas = version.Modifications;
             * datas.Filtre = new CFiltreData(CVersionDonneesObjetOperation.c_champTypeChamp + "=@1 and " +
             *      CVersionDonneesObjetOperation.c_champChamp + "=@2",
             *      CChampCustomPourVersion.c_typeChamp,
             *      champ.Id.ToString());
             * datas.InterditLectureInDB = true;
             *
             * if (datas.Count != 0)
             *      verData = (CVersionDonneesObjetOperation)datas[0];
             * */
            //Nouveau code
            object dummy = null;

            if (!version.IsDependanceChargee(CVersionDonneesObjetOperation.c_nomTable, CVersionDonneesObjet.c_champId))
            {
                dummy = version.Modifications;
            }
            DataTable     table = version.ContexteDonnee.GetTableSafe(CVersionDonneesObjetOperation.c_nomTable);
            StringBuilder bl    = new StringBuilder();

            bl.Append(CVersionDonneesObjet.c_champId);
            bl.Append("=");
            bl.Append(version.Id);
            bl.Append(" and ");
            bl.Append(CVersionDonneesObjetOperation.c_champTypeChamp);
            bl.Append("='");
            bl.Append(CChampCustomPourVersion.c_typeChamp);
            bl.Append("' and ");
            bl.Append(CVersionDonneesObjetOperation.c_champChamp);
            bl.Append("='");
            bl.Append(champ.Id);
            bl.Append("'");
            DataRow[] rows = table.Select(bl.ToString());
            if (rows.Length > 0)
            {
                verData = new CVersionDonneesObjetOperation(rows[0]);
            }
            //fin du nouveau code
            else
            {
                verData = new CVersionDonneesObjetOperation(version.ContexteDonnee);
                verData.CreateNewInCurrentContexte();
                verData.VersionObjet      = version;
                verData.CodeTypeOperation = (int)CTypeOperationSurObjet.TypeOperation.Modification;
            }
            verData.FieldKey = champ.Id.ToString();

            //Pour les prévisionnelles, stocke la nouvelle valeur
            if (version.VersionDonnees.TypeVersion.Code == CTypeVersion.TypeVersion.Previsionnelle)
            {
                verData.SetValeurStd(valeurApres);
            }
            else
            {
                //Pour les archives, stocke l'ancienne valeur
                verData.SetValeurStd(valeurAvant);
            }
            verData.TypeChamp = CChampCustomPourVersion.c_typeChamp;
            if (version != null && version.TypeOperation == CTypeOperationSurObjet.TypeOperation.Aucune)
            {
                version.CodeTypeOperation = (int)CTypeOperationSurObjet.TypeOperation.Modification;
            }
            return(verData);
        }
示例#10
0
        //------------------------------------------------------
        private TreeNode CreateNodeObjet(TreeNodeCollection nodes, CObjetDonneeAIdNumerique objet)
        {
            if (objet == null)
            {
                TreeNode newNode = new TreeNode(I.T("No value|107"));
                newNode.Tag                = null;
                newNode.ImageIndex         = c_nImageUnchanged;
                newNode.SelectedImageIndex = c_nImageUnchanged;
                nodes.Add(newNode);
                return(newNode);
            }
            int nImage = c_nImageUnchanged;

            if (m_version.TypeVersion.Code == CTypeVersion.TypeVersion.Previsionnelle)
            {
                StringBuilder blIdsVersionsInteressantes = new StringBuilder();
                blIdsVersionsInteressantes.Append(m_version.Id);
                foreach (int nId in m_nIdsVersionsSuccessives)
                {
                    blIdsVersionsInteressantes.Append(";");
                    blIdsVersionsInteressantes.Append(nId);
                }
                //Version prévisionnelle
                //L'élément a-t-il été supprimé ?
                CFiltreData filtre = new CFiltreDataAvance(
                    CVersionDonneesObjet.c_nomTable,
                    CVersionDonneesObjet.c_champTypeOperation + "=@1 and " +
                    CVersionDonneesObjet.c_champTypeElement + "=@2 and " +
                    CVersionDonneesObjet.c_champIdElement + "=@3 and " +
                    CVersionDonnees.c_champId + " in (" + blIdsVersionsInteressantes.ToString() + ")",
                    (int)CTypeOperationSurObjet.TypeOperation.Suppression,
                    objet.GetType().ToString(),
                    objet.Id);
                //si prévisionnelle, y a t il une création depuis la version de référence ?
                CVersionDonneesObjet versionObjet = new CVersionDonneesObjet(m_contexteDonnees);
                if (versionObjet.ReadIfExists(filtre))
                {
                    nImage = c_nImageDelete;
                }
                else
                {
                    //Y a t-il un ajout ?
                    filtre.Parametres[0] = (int)CTypeOperationSurObjet.TypeOperation.Ajout;
                    if (versionObjet.ReadIfExists(filtre))
                    {
                        nImage = c_nImageAdd;
                    }
                    else
                    {
                        //Modification ?
                        filtre.Parametres[0] = (int)CTypeOperationSurObjet.TypeOperation.Modification;
                        if (versionObjet.ReadIfExists(filtre))
                        {
                            nImage = c_nImageEdit;
                        }
                    }
                }
            }
            else             //Version archive ou étiquette
            {
                if (objet.IdVersionDatabase != null)
                {
                    //L'objet appartient à une version, il a donc été supprimé
                    nImage = c_nImageDelete;
                }
                else
                {
                    //Trouve t-on un ajout depuis la version de référence ?
                    CVersionDonneesObjet versionObjet = new CVersionDonneesObjet(m_contexteDonnees);
                    CFiltreData          filtre       = new CFiltreDataAvance(
                        CVersionDonneesObjet.c_nomTable,
                        CVersionDonneesObjet.c_champTypeOperation + "=@1 and " +
                        CVersionDonneesObjet.c_champTypeElement + "=@2 and " +
                        CVersionDonneesObjet.c_champIdElement + "=@3 and " +
                        CVersionDonnees.c_champId + ">=@4 and " +
                        CVersionDonnees.c_nomTable + "." +
                        CVersionDonnees.c_champTypeVersion + "=@5",
                        (int)CTypeOperationSurObjet.TypeOperation.Ajout,
                        objet.GetType().ToString(),
                        objet.Id,
                        m_version.Id,
                        (int)CTypeVersion.TypeVersion.Archive);
                    if (versionObjet.ReadIfExists(filtre))
                    {
                        nImage = c_nImageAdd;
                    }
                    else
                    {
                        filtre.Parametres[0] = (int)CTypeOperationSurObjet.TypeOperation.Modification;
                        if (versionObjet.ReadIfExists(filtre))
                        {
                            nImage = c_nImageEdit;
                        }
                    }
                }
            }
            TreeNode node = new TreeNode(objet.DescriptionElement);

            node.ImageIndex         = nImage;
            node.SelectedImageIndex = nImage;
            node.Tag = objet;
            //Ajoute un faux fils
            nodes.Add(node);
            AddFakeNode(node);
            return(node);
        }