Exemplo n.º 1
0
        /// ////////////////////////////////////////////////////////
        protected override CResultAErreur MyExecute(CContexteExecutionAction contexte)
        {
            CResultAErreur     result  = CResultAErreur.True;
            CFamilleEquipement famille = new CFamilleEquipement(contexte.ContexteDonnee);

            if (!famille.ReadIfExists(m_nIdFamilleEquipement))
            {
                result.EmpileErreur(I.T("Equipment type family @1 doesn't exists|20027", m_nIdFamilleEquipement.ToString()));
                return(result);
            }

            CListeObjetsDonnees lstTypes = new CListeObjetsDonnees(contexte.ContexteDonnee, typeof(CSpvTypeq));

            lstTypes.Filtre = new CFiltreData(CSpvTypeq.c_champSmtTypeEquipement_Id + " is null");
            foreach (CSpvTypeq typeEq in lstTypes.ToArrayList())
            {
                CTypeEquipement type = new CTypeEquipement(contexte.ContexteDonnee);
                type.CreateNewInCurrentContexte();
                type.Libelle             = typeEq.Libelle;
                type.Famille             = famille;
                typeEq.TypeEquipementSmt = type;
            }

            CListeObjetsDonnees lstObjets = new CListeObjetsDonnees(contexte.ContexteDonnee, typeof(CSpvEquip));

            lstObjets.Filtre = new CFiltreDataAvance(CSpvEquip.c_nomTable,
                                                     "HasNo(" + CSpvEquip.c_champSmtEquipementLogique_Id + ") and " +
                                                     "Has(TypeEquipement." + CSpvTypeq.c_champSmtTypeEquipement_Id + ") and " +
                                                     "has(" + CSpvSite.c_nomTable + "." + CSpvSite.c_champSmtSite_Id + ")");
            int nNbEquips = lstObjets.Count;
            int nEquip    = 0;

            if (contexte.IndicateurProgression != null)
            {
                contexte.IndicateurProgression.PushSegment(9, nNbEquips);
                contexte.SetInfoProgression(I.T("Transfering discovered equipments|20221"));
            }
            ArrayList lstEquips = lstObjets.ToArrayList();

            foreach (CSpvEquip equipSpv in lstEquips)
            {
                nEquip++;
                if (nEquip % 20 == 0 && contexte.IndicateurProgression != null)
                {
                    contexte.IndicateurProgression.SetValue(nEquip / 2);
                    contexte.SetInfoProgression((int)(nEquip / 2) + "/" + nNbEquips);
                }
                CSpvSite  siteSpv   = equipSpv.SpvSite;
                CSpvTypeq typeEqSpv = equipSpv.TypeEquipement;
                if (siteSpv != null && typeEqSpv != null)
                {
                    CTypeEquipement typeTimos = typeEqSpv.TypeEquipementSmt;
                    CSite           siteTimos = siteSpv.ObjetTimosAssocie;
                    if (typeTimos != null && siteTimos != null)
                    {
                        CEquipementLogique equipementTimos = new CEquipementLogique(contexte.ContexteDonnee);
                        equipementTimos.TypeEquipement = typeTimos;
                        equipementTimos.Site           = siteTimos;
                        equipementTimos.Libelle        = equipSpv.CommentairePourSituer;
                        equipSpv.ObjetTimosAssocie     = equipementTimos;
                    }
                }
            }
            foreach (CSpvEquip equipSpv in lstEquips)
            {
                nEquip++;
                if (nEquip % 20 == 0 && contexte.IndicateurProgression != null)
                {
                    contexte.IndicateurProgression.SetValue(nEquip / 2);
                    contexte.SetInfoProgression((int)(nEquip / 2) + "/" + nNbEquips);
                }
                CEquipementLogique equip = equipSpv.ObjetTimosAssocie;
                if (equipSpv.EquipementEnglobant != null)
                {
                    CEquipementLogique englobant = equipSpv.EquipementEnglobant.ObjetTimosAssocie;
                    if (englobant == null)
                    {
                        result = equipSpv.Delete(true);
                        if (!result)
                        {
                            return(result);
                        }
                    }
                    else
                    {
                        equip.EquipementLogiqueContenant = englobant;
                    }
                }
            }
            if (contexte.IndicateurProgression != null)
            {
                contexte.IndicateurProgression.PopSegment();
            }
            return(result);
        }
Exemplo n.º 2
0
        //-----------------------------------------------------------------
        /// <summary>
        /// recalcule l'arbre opérationnel
        /// </summary>
        /// <param name="baseGraphes"></param>
        /// <returns></returns>
        public CResultAErreur RecalculeArbreOperationnelInContexte(CBaseGraphesReseau baseGraphes)
        {
            if (baseGraphes == null)
            {
                baseGraphes = new CBaseGraphesReseau();
            }
            CResultAErreur result = CResultAErreur.True;
            CSchemaReseau  schema = ObjetTimosAssocie;

            //Supprime toutes les dépendances à des elements de graphe
            result = CObjetDonneeAIdNumerique.Delete(ElementsDeGraphe, true);
            if (!result)
            {
                return(result);
            }

            foreach (ESensAllerRetourLienReseau sens in Enum.GetValues(typeof(ESensAllerRetourLienReseau)))
            {
                ESensAllerRetourLienReseau?sensRetenu = null;
                if (schema.LienReseau == null)
                {
                    sensRetenu = sens;
                }
                //Calcule le graphe
                CGrapheReseau graphe = baseGraphes.GetGrapheExistant(schema, sensRetenu);
                if (graphe == null)
                {
                    graphe = new CGrapheReseau(baseGraphes);
                    result = graphe.CalculeGraphe(schema, sensRetenu);
                    if (!result)
                    {
                        return(result);
                    }
                }
                CArbreOperationnel arbre = new CArbreOperationnel();
                result = arbre.CalculArbreRedondanceAuto(schema, graphe);
                if (!result)
                {
                    return(result);
                }
                result = CSpvElementDeGraphe.CreateFromElementDeArbreOperationnel(this, arbre.ElementRacine, sensRetenu);
                if (!result)
                {
                    return(result);
                }
                if (schema.LienReseau != null)
                {
                    break;
                }
            }

            //Recalcule les éléments de graphe qui utilisent ce schéma
            CListeObjetsDonnees lstEltsUtilisantLeSchema = new CListeObjetsDonnees(ContexteDonnee, typeof(CSpvElementDeGraphe));

            lstEltsUtilisantLeSchema.Filtre = new CFiltreData(CSpvElementDeGraphe.c_champIdSchemaSmt + "=@1",
                                                              schema.Id);
            foreach (CSpvElementDeGraphe elt in lstEltsUtilisantLeSchema.ToArrayList())
            {
                CSpvElementDeGrapheSousSchema eltSpvSousSchema = elt.GetElementDuBonType() as CSpvElementDeGrapheSousSchema;
                if (eltSpvSousSchema != null)
                {
                    CNoeudDeGrapheReseau noeudDepart = eltSpvSousSchema.NoeudDepart;
                    CNoeudDeGrapheReseau noeudArrive = eltSpvSousSchema.NoeudArrive;
                    CArbreOperationnel   arbre       = new CArbreOperationnel();
                    CGrapheReseau        graphe      = baseGraphes.GetGrapheExistant(schema, eltSpvSousSchema.SensGraphe);
                    if (graphe == null)
                    {
                        graphe = new CGrapheReseau(baseGraphes);
                        result = graphe.CalculeGraphe(schema, eltSpvSousSchema.SensGraphe);
                        if (!result)
                        {
                            return(result);
                        }
                    }
                    result = arbre.CalculArbreRedondanceAuto(schema, graphe, noeudDepart, noeudArrive);
                    if (!result)
                    {
                        return(result);
                    }
                    CElementDeArbreOperationnelSousSchema eltOp = new CElementDeArbreOperationnelSousSchema(null);
                    eltOp.ElementDeArbre = arbre.ElementRacine;
                    eltOp.IdSchema       = schema.Id;
                    eltOp.NoeudArrive    = noeudArrive;
                    eltOp.NoeudDepart    = noeudDepart;

                    result = CObjetDonneeAIdNumerique.Delete(eltSpvSousSchema.ElementsFils, true);
                    if (!result)
                    {
                        return(result);
                    }
                    result = eltSpvSousSchema.FillFromElementDeGraphe(eltOp);
                    if (!result)
                    {
                        return(result);
                    }
                }
            }

            return(result);
        }
Exemplo n.º 3
0
        //-------------------------------------------------------------------
        public override CResultAErreur VerifieDonnees(CObjetDonnee objet)
        {
            CResultAErreur result = CResultAErreur.True;

            try
            {
                CIntervention inter = (CIntervention)objet;

                if (inter.Site == null)
                {
                    result.EmpileErreur(I.T("The intervention must be associated to a Site|388"));
                }

                if (inter.TypeIntervention == null)
                {
                    result.EmpileErreur(I.T("The Intervention type cannot be null|152"));
                }

                if (inter.Fractions.Count == 0)
                {
                    //Pas de fractions, il faut au moins un préplanifieur
                    if (inter.DateDebutPrePlanifiee == null ||
                        inter.DateFinPrePlanifiee == null)
                    {
                        if (inter.UserPreplanifieur == null)
                        {
                            result.EmpileErreur(I.T("The person in charge of preplanning must be defined|209"));
                        }
                    }
                    else
                    {
                        if (inter.UserPlanifieur == null)
                        {
                            result.EmpileErreur(I.T("The person in charge of planning must be definde|210"));
                        }
                    }
                }

                if (inter.UserPlanifieur != null)
                {
                    if (inter.TypeIntervention != null && inter.TypeIntervention.ProfilPlanifieur != null)
                    {
                        if (!inter.TypeIntervention.ProfilPlanifieur.IsInProfil(inter.UserPlanifieur, inter))
                        {
                            result.EmpileErreur(I.T("The user @1 cannot be a planner|211"), inter.UserPlanifieur.Acteur.IdentiteComplete);
                        }
                    }
                }
                if (inter.UserPreplanifieur != null)
                {
                    if (inter.TypeIntervention != null && inter.TypeIntervention.ProfilPreplanifieur != null)
                    {
                        if (!inter.TypeIntervention.ProfilPreplanifieur.IsInProfil(inter.UserPreplanifieur, inter))
                        {
                            result.EmpileErreur(I.T("The user @1 cannot be a preplanner|212"), inter.UserPreplanifieur.Acteur.IdentiteComplete);
                        }
                    }
                }


                // Vérifie le doublons des Opérations prévisionnelles: même type d'opération et même équipement
                CListeObjetsDonnees listOpe = inter.Operations;
                listOpe.Filtre = new CFiltreData(CEquipement.c_champId + " is not null");
                ArrayList listeAVerifier = listOpe.ToArrayList();


                /* foreach (COperation ope1 in listeAVerifier)
                 * {
                 *   foreach (COperation ope2 in listeAVerifier)
                 *   {
                 *       if (ope1.Id != ope2.Id &&
                 *           ope1.TypeOperation.Id == ope2.TypeOperation.Id &&
                 *           ope1.Equipement.Id == ope2.Equipement.Id)
                 *       {
                 *                                       result.EmpileErreur(I.T( "There are tow '@1' Operations on equipment '@2'|363", ope1.TypeOperation.Libelle, ope1.Equipement.Libelle));
                 *       }
                 *   }
                 * }*/
            }
            catch (Exception e)
            {
                result.EmpileErreur(new CErreurException(e));
            }

            return(result);
        }
Exemplo n.º 4
0
        //---------------------------------------------
        private void FillListeInterventionsAPlanifier()
        {
            m_timerRefreshInterventionsPlanifiees.Stop();
            IElementAIntervention element = m_controlePlanning.ElementAInterventionSelectionne;

            if (element == null)
            {
                m_chkIntersSurSiteSelectionné.Visible = false;
            }
            else
            {
                m_chkIntersSurSiteSelectionné.Text = I.T("Filter on @1|20658", element.DescriptionElement);
            }
            m_panelTachesPrePlanifiees.Visible = true;

            DateTime dateDebut = m_controlePlanning.DateDebut.Date;

            DateTime dateFin = m_controlePlanning.DateFin.Date.AddDays(1);

            m_lblDatesListe.Text = I.T("from @1 to @2|20652", dateDebut.ToShortDateString(),
                                       dateFin.ToShortDateString());

            if (m_listeEntitesSelectionnee != null)
            {
                m_chkIntersSurListe.Text = m_listeEntitesSelectionnee.Libelle;
            }
            if (m_filtreDynamicSelectionnee != null)
            {
                m_chkIntersFiltre.Text = m_filtreDynamicSelectionnee.Libelle;
            }


            CListeObjetsDonnees listeInters = new CListeObjetsDonnees(m_contexteDonnee, typeof(CIntervention));

            listeInters.PreserveChanges = true;

            CFiltreData filtre = new CFiltreDataAvance(CIntervention.c_nomTable,
                                                       "(" + CIntervention.c_champDateDebutPreplanifiee + "<@1 and " +
                                                       CIntervention.c_champDateFinPrePlanifiee + ">@2) or (" +
                                                       CFractionIntervention.c_nomTable + "." +
                                                       CFractionIntervention.c_champDateDebutPlanifie + "<@1 and " +
                                                       CFractionIntervention.c_nomTable + "." +
                                                       CFractionIntervention.c_champDateFinPlanifiee + ">@2)",
                                                       dateFin,
                                                       dateDebut);

            if (m_chkIntersSurSiteSelectionné.Checked && element is CSite)
            {
                filtre = CFiltreData.GetAndFiltre(filtre,
                                                  new CFiltreData(CIntervention.c_champIdElementLie + "=@1",
                                                                  element.Id));
            }
            if (m_chkIntersNonPlanifiées.Checked)
            {
                filtre = CFiltreData.GetAndFiltre(filtre,
                                                  new CFiltreDataAvance(CIntervention.c_nomTable,
                                                                        "HasNo(" + CFractionIntervention.c_nomTable + "." +
                                                                        CFractionIntervention.c_champId + ")"));
            }
            if (m_chkIntersNonAffectées.Checked)
            {
                filtre = CFiltreData.GetAndFiltre(filtre,
                                                  new CFiltreDataAvance(CIntervention.c_nomTable,
                                                                        "Hasno(" + CIntervention_Intervenant.c_nomTable + "." +
                                                                        CIntervention_Intervenant.c_champId + ")"));
            }
            listeInters.Filtre = filtre;

            if (m_setIdsInterventionsVisiblesCalculéDefiltreEtListe == null)
            {
                CalculeSetIdsInterventionsVisibles();
            }


            List <CIntervention> lstFiltree = listeInters.ToList <CIntervention>();

            foreach (CIntervention inter in listeInters.ToArrayList())
            {
                if (m_chkIntersNonPlanifiées.Checked && inter.Fractions.Count > 0)
                {
                    lstFiltree.Remove(inter);
                }
                if (m_chkIntersNonAffectées.Checked && inter.RelationsIntervenants.Count > 0)
                {
                    lstFiltree.Remove(inter);
                }
                if (inter.Id >= 0 && m_setIdsInterventionsVisiblesCalculéDefiltreEtListe != null &&
                    !m_setIdsInterventionsVisiblesCalculéDefiltreEtListe.Contains(inter.Id))
                {
                    lstFiltree.Remove(inter);
                }
            }
            m_wndListeInterAPlanifier.ListeSource = lstFiltree;
            m_wndListeInterAPlanifier.Refresh();
        }
Exemplo n.º 5
0
        private static void OnRetrieveMails(object state)
        {
            if (m_bTraitementEnCours)
                return;
            m_bTraitementEnCours = true;

            try
            {
                System.Threading.Thread.CurrentThread.Priority = System.Threading.ThreadPriority.Lowest;
                CResultAErreur result;
                if (m_sessionRecherche == null || !m_sessionRecherche.IsConnected)
                {
                    m_sessionRecherche = CSessionClient.CreateInstance();
                    result = m_sessionRecherche.OpenSession(new CAuthentificationSessionServer(),
                        I.T("MAIL ACCOUNT SERVICE|10001"),
                        ETypeApplicationCliente.Service);
                    if (!result)
                    {
                        C2iEventLog.WriteErreur(I.T("Session Opening error for Mail Account Management Service|10003"));
                        return;
                    }
                }
                try
                {
                    CFiltreData filtre = new CFiltreData(
                        CCompteMail.c_champIsActive + " = @1",
                        true);
                    if (new CCompteMailServeur(m_sessionRecherche.IdSession).CountRecords(
                        CCompteMail.c_nomTable, filtre) > 0)
                    {
                        CSessionClient sessionTravail = new CSessionProcessServeurSuivi();
                        result = sessionTravail.OpenSession(new CAuthentificationSessionServer(),
                            I.T("RECEIVE MAILS SERVICE|10004"),
                            ETypeApplicationCliente.Service);
                        if (!result)
                        {
                            C2iEventLog.WriteErreur(I.T("Working session openning error for Receive Mails Service|10005"));
                            return;
                        }
                        try
                        {
                            using (CContexteDonnee contexteTravail = new CContexteDonnee(sessionTravail.IdSession, true, false))
                            {
                                //CCompteMailServeur compteServeur = new CCompteMailServeur(sessionTravail.IdSession);
                                CListeObjetsDonnees liste = new CListeObjetsDonnees(contexteTravail, typeof(CCompteMail));
                                liste.Filtre = filtre;
                                ArrayList lstLock = liste.ToArrayList();

                                foreach (CCompteMail compteMail in lstLock)
                                {
                                    if (compteMail.DateDernierReleve == null ||
                                        compteMail.DateDernierReleve.Value.AddMinutes(compteMail.PeriodeReleve) < DateTime.Now)
                                    {
                                        result += compteMail.RetrieveMails();
                                    }
                                }
                            }
                        }
                        catch (Exception e)
                        {
                            C2iEventLog.WriteErreur(I.T("Error while receiving Mail : @1|10006", e.ToString()));
                        }
                        finally
                        {
                            try
                            {
                                sessionTravail.CloseSession();
                            }
                            catch { }
                        }
                    }
                }
                catch (Exception e)
                {
                    C2iEventLog.WriteErreur(I.T("Error while receiving Mail : @1|10006", e.ToString()));
                }
            }
            catch (Exception e)
            {
                {
                    C2iEventLog.WriteErreur(I.T("Error while receiving Mail : @1|10006", e.ToString()));
                }
            }
            finally
            {
                m_bTraitementEnCours = false;
            }
        }
Exemplo n.º 6
0
        private static void OnSendSMS(object state)
        {
            if (m_bTraitementEnCours)
            {
                return;
            }
            m_bTraitementEnCours = true;

            try
            {
                System.Threading.Thread.CurrentThread.Priority = System.Threading.ThreadPriority.Lowest;
                CResultAErreur result;
                if (m_sessionRecherche == null || !m_sessionRecherche.IsConnected)
                {
                    m_sessionRecherche = CSessionClient.CreateInstance();
                    result             = m_sessionRecherche.OpenSession(new CAuthentificationSessionServer(),
                                                                        I.T("SMS SERVICE|20159"),
                                                                        ETypeApplicationCliente.Service);
                    if (!result)
                    {
                        C2iEventLog.WriteErreur(I.T("Session Opening error for SMS Service|20160"));
                        return;
                    }
                }
                try
                {
                    CFiltreData filtre = new CFiltreData(CMessageSMS.c_champNextSendDate + " < @1 and " +
                                                         CMessageSMS.c_champDateEnvoi + " is null and " +
                                                         CMessageSMS.c_champNbEssais + " < 10",
                                                         DateTime.Now
                                                         );
                    if (new CMessageSMSServeur(m_sessionRecherche.IdSession).CountRecords(
                            CMessageSMS.c_nomTable, filtre) > 0)
                    {
                        CSessionClient sessionTravail = new CSessionProcessServeurSuivi();
                        result = sessionTravail.OpenSession(new CAuthentificationSessionProcess(),
                                                            I.T("Send SMS|20161"),
                                                            ETypeApplicationCliente.Service);
                        if (!result)
                        {
                            C2iEventLog.WriteErreur(I.T("Working session openning error for SMS send|20162"));
                            return;
                        }
                        try
                        {
                            using (CContexteDonnee contexteTravail = new CContexteDonnee(sessionTravail.IdSession, true, false))
                            {
                                CMessageSMSServeur  serveur = new CMessageSMSServeur(sessionTravail.IdSession);
                                CListeObjetsDonnees liste   = new CListeObjetsDonnees(contexteTravail, typeof(CMessageSMS));
                                liste.Filtre = filtre;
                                ArrayList lstLock = liste.ToArrayList();

                                foreach (CMessageSMS message in lstLock)
                                {
                                    CMessageSMSPourEnvoi toSend = new CMessageSMSPourEnvoi(message.Destinataires, message.Texte);
                                    result = toSend.Send(sessionTravail.IdSession);
                                    message.BeginEdit();
                                    if (!result)
                                    {
                                        message.NextSendDate = DateTime.Now.AddMinutes(3);
                                        message.NbEssais++;
                                        message.LastErreur = result.Erreur.ToString();
                                    }
                                    else
                                    {
                                        message.DateEnvoi  = DateTime.Now;
                                        message.LastErreur = "";
                                    }
                                    message.CommitEdit();

                                    result.SetTrue();
                                }
                            }
                        }
                        catch (Exception e)
                        {
                            C2iEventLog.WriteErreur(I.T("Error while sendind SMS : @1|20163", e.ToString()));
                        }
                        finally
                        {
                            try
                            {
                                sessionTravail.CloseSession();
                            }
                            catch { }
                        }
                    }
                }
                catch (Exception e)
                {
                    C2iEventLog.WriteErreur(I.T("Error while sendind SMS : @1|20163", e.ToString()));
                }
            }
            catch (Exception e)
            {
                {
                    C2iEventLog.WriteErreur(I.T("Error while sendind SMS : @1|20163", e.ToString()));
                }
            }
            finally
            {
                m_bTraitementEnCours = false;
            }
        }
Exemplo n.º 7
0
        //---------------------------------------------------------------------------
        public CResultAErreur TraitementApresSauvegarde(CContexteDonnee contexte)
        {
            CResultAErreur result = CResultAErreur.True;
            DataTable      table  = contexte.Tables[GetNomTable()];

            if (table == null)
            {
                return(result);
            }
            HashSet <DataRow> rowsToSend = table.ExtendedProperties[GetType()] as HashSet <DataRow>;

            if (rowsToSend == null)
            {
                return(result);
            }
            CListeObjetsDonnees lstServiceMediation = new CListeObjetsDonnees(contexte, typeof(CSnmpProxyInDb));

            HashSet <string> myIps = new HashSet <string>();

            System.Net.IPHostEntry moiMeme = System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName());
            foreach (IPAddress adresse in moiMeme.AddressList)
            {
                myIps.Add(adresse.ToString());
            }

            foreach (CSnmpProxyInDb proxy in lstServiceMediation.ToArrayList())
            {
                string strParametresAgent = proxy.AdresseIp;
                foreach (DataRow row in rowsToSend)
                {
                    if (DoitMettreAJour(proxy, row))
                    {
                        EOperationSynchronisationSurAgentSynchronisation typeOperation = EOperationSynchronisationSurAgentSynchronisation.CreateOrUpdate;
                        if (row.RowState == DataRowState.Deleted)
                        {
                            typeOperation = EOperationSynchronisationSurAgentSynchronisation.Delete;
                        }
                        string strId = row[ChampIdDeTypeSynchronise,
                                           row.RowState == DataRowState.Deleted ? DataRowVersion.Original : DataRowVersion.Current].ToString();
                        IOperationSynchronisation operation = new COperationSynchronisationSurAgentSynchronisation(
                            GetType(),
                            strParametresAgent,
                            typeOperation,
                            strId);
                        if (myIps.Contains(proxy.AdresseIp))
                        {
                            Init(proxy.AdresseIp);
                            result = DoOperation(operation, contexte);
                            if (!result)
                            {
                                return(result);
                            }
                        }
                        else
                        {
                            CSynchroniseurBaseDistante.DefaultInstance.AddOperation(contexte.IdSession, proxy.CleBaseDistante,
                                                                                    operation);
                        }
                    }
                }
            }
            table.ExtendedProperties.Remove(GetType());
            return(result);
        }
Exemplo n.º 8
0
        /////////////////////////////////////////////////////////////////
        /// <summary>
        /// Ajoute la suppression de relationsTypeId qui sont des compositions
        /// </summary>
        /// <returns></returns>
        public static CResultAErreur DoDeleteInterneACObjetDonneeNePasUtiliserSansBonneRaison(CListeObjetsDonnees liste, bool bDansContexteCourant)
        {
            CResultAErreur result = CResultAErreur.True;

            if (liste.Count == 0)
            {
                return(result);
            }

            Type typeElements = liste.TypeObjets;
            int  nTailleBloc  = 500;           //Travaille par bloc de 500 éléments
            int  nCount       = liste.Count;

            for (int nBloc = 0; nBloc < nCount; nBloc += nTailleBloc)
            {
                StringBuilder blIds = new StringBuilder();
                int           nMin  = Math.Min(nBloc + nTailleBloc, nCount);
                for (int nElement = nBloc; nElement < nMin; nElement++)
                {
                    if (((CObjetDonneeAIdNumerique)liste[nElement]).IsValide())
                    {
                        blIds.Append(((CObjetDonneeAIdNumerique)liste[nElement]).Id);
                        blIds.Append(',');
                    }
                }
                if (blIds.Length > 0)
                {
                    blIds.Remove(blIds.Length - 1, 1);
                    {
                        string strListeIds = blIds.ToString();
                        //Supprime tous les fils de relation TypeId
                        foreach (RelationTypeIdAttribute relation in CContexteDonnee.RelationsTypeIds)
                        {
                            if (relation.Composition)
                            {
                                Type tpLiens = CContexteDonnee.GetTypeForTable(relation.TableFille);
                                if (relation.IsAppliqueToType(typeElements))
                                {
                                    CListeObjetsDonnees listeTypeId = new CListeObjetsDonnees(liste.ContexteDonnee, tpLiens, false);
                                    CFiltreData         filtre      = new CFiltreData(
                                        relation.ChampType + "=@1 and " +
                                        relation.ChampId + " in (" + strListeIds + ")",
                                        typeElements.ToString());
                                    listeTypeId.Filtre          = filtre;
                                    listeTypeId.PreserveChanges = true;
                                    result = DoDeleteInterneACObjetDonneeNePasUtiliserSansBonneRaison(listeTypeId, bDansContexteCourant);
                                    if (!result)
                                    {
                                        return(result);
                                    }
                                }
                            }
                        }
                    }
                }
            }
            List <CInfoRelation> relationsAMettreANull = new List <CInfoRelation>();
            string strNomTable = CContexteDonnee.GetNomTableForType(liste.TypeObjets);

            foreach (CInfoRelation info in CContexteDonnee.GetListeRelationsTable(strNomTable))
            {
                if (info.PasserLesFilsANullLorsDeLaSuppression && info.TableParente == strNomTable)
                {
                    relationsAMettreANull.Add(info);
                }
            }
            //Met à null ce qui doit l'être
            for (int nBloc = 0; nBloc < nCount; nBloc += nTailleBloc)
            {
                int           nMin = Math.Min(nBloc + nTailleBloc, nCount);
                StringBuilder bl   = new StringBuilder();
                for (int nElt = nBloc; nElt < nMin; nElt++)
                {
                    if (((CObjetDonneeAIdNumerique)liste[nElt]).IsValide())
                    {
                        bl.Append(((CObjetDonneeAIdNumerique)liste[nElt]).Id);
                        bl.Append(',');
                    }
                }
                bl.Remove(bl.Length - 1, 1);
                if (bl.Length > 0)
                {
                    foreach (CInfoRelation relationToNull in relationsAMettreANull)
                    {
                        CListeObjetsDonnees lstFils = new CListeObjetsDonnees(liste.ContexteDonnee,
                                                                              CContexteDonnee.GetTypeForTable(relationToNull.TableFille));
                        lstFils.Filtre = new CFiltreData(relationToNull.ChampsFille[0] + " in(" +
                                                         bl.ToString() + ")");
                        lstFils.Filtre.IgnorerVersionDeContexte     = true;
                        lstFils.Filtre.IntegrerLesElementsSupprimes = true;
                        lstFils.PreserveChanges = true;
                        foreach (CObjetDonnee fils in lstFils.ToArrayList())
                        {
                            fils.Row.Row.BeginEdit();
                            foreach (string strChamp in relationToNull.ChampsFille)
                            {
                                fils.Row.Row[strChamp] = DBNull.Value;
                            }
                            fils.Row.Row.EndEdit();
                        }
                    }
                }
            }
            foreach (CObjetDonneeAIdNumerique objet in liste.ToArrayList())
            {
                try
                {
                    if (objet.Row.RowState != DataRowState.Deleted && objet.Row.RowState != DataRowState.Detached)
                    {
                        objet.Row.Row.Sc2iDelete();
                    }
                }
                catch (Exception e)
                {
                    result.EmpileErreur(new CErreurException(e));
                    return(result);
                }
            }
            return(result);
        }
Exemplo n.º 9
0
        ////////////////////////////////////////////////////////////
        public static CResultAErreur DeleteAvecCascadeSansControleDoncIlFautEtreSurDeSoi(CListeObjetsDonnees liste, bool bDansContexteCourant)
        {
            CResultAErreur result      = CResultAErreur.True;
            bool           bOldEnforce = liste.ContexteDonnee.EnforceConstraints;
            StringBuilder  bl          = new StringBuilder();

            foreach (CObjetDonneeAIdNumerique objetTmp in liste)
            {
                if (objetTmp.IsValide())
                {
                    bl.Append(objetTmp.Id);
                    bl.Append(',');
                }
            }
            if (bl.Length == 0)
            {
                return(result);
            }
            bl.Remove(bl.Length - 1, 1);
            if (IsUtiliseDansVersionFuture(liste, bl.ToString()))
            {
                result.EmpileErreur(I.T("Cannot delete these elements because they will be used in future versions|187"));
                return(result);
            }
            try
            {
                liste.ContexteDonnee.EnforceConstraints = false;
                if (liste.Count == 0)
                {
                    return(result);
                }
                foreach (CObjetDonneeAIdNumerique objet in liste)
                {
                    if (objet.IsValide())
                    {
                        result = objet.MyCanDelete();
                        if (!result)
                        {
                            return(result);
                        }
                    }
                }
                Type   typeElements = liste.TypeObjets;
                string strListeIds  = "";
                foreach (CObjetDonneeAIdNumerique objet in liste)
                {
                    if (objet.IsValide())
                    {
                        strListeIds += objet.Id.ToString() + ",";
                    }
                }
                strListeIds = strListeIds.Substring(0, strListeIds.Length - 1);
                string strNomTable = CContexteDonnee.GetNomTableForType(liste.TypeObjets);

                foreach (CInfoRelation relation in CContexteDonnee.GetListeRelationsTable(strNomTable))
                {
                    if (relation.TableParente == strNomTable)
                    {
                        //Car la dépendance doit être lue pour la suppression
                        CListeObjetsDonnees listeDep = liste.GetDependancesFilles(relation);
                        result = DeleteAvecCascadeSansControleDoncIlFautEtreSurDeSoi(listeDep, bDansContexteCourant);
                        if (!result)
                        {
                            return(result);
                        }
                    }
                }

                if (typeElements.GetCustomAttributes(typeof(NoRelationTypeIdAttribute), true).Length == 0)
                {
                    //Peut-on supprimer les relationsTypeId
                    foreach (RelationTypeIdAttribute relation in CContexteDonnee.RelationsTypeIds)
                    {
                        Type tpLiens = CContexteDonnee.GetTypeForTable(relation.TableFille);
                        CListeObjetsDonnees listeTypeId = new CListeObjetsDonnees(liste.ContexteDonnee, tpLiens, false);
                        CFiltreData         filtre      = new CFiltreData(
                            relation.ChampType + "=@1 and " +
                            relation.ChampId + " in (" + strListeIds + ")",
                            typeElements.ToString());
                        listeTypeId.Filtre          = filtre;
                        listeTypeId.PreserveChanges = true;
                        result = DeleteAvecCascadeSansControleDoncIlFautEtreSurDeSoi(listeTypeId, bDansContexteCourant);
                    }
                }
                foreach (CObjetDonneeAIdNumerique objet in liste.ToArrayList())
                {
                    if (objet.IsValide())
                    {
                        result = objet.DoDeleteInterneACObjetDonneeNePasUtiliserSansBonneRaison(bDansContexteCourant);
                        if (!result)
                        {
                            return(result);
                        }
                    }
                }
            }
            catch (Exception e)
            {
                result.EmpileErreur(new CErreurException(e));
            }
            finally
            {
                try
                {
                    liste.ContexteDonnee.EnforceConstraints = bOldEnforce;
                }
                catch
                {
                    if (liste.ContexteDonnee.HasErrors)
                    {
                        foreach (DataTable table in liste.ContexteDonnee.Tables)
                        {
                            if (table.HasErrors)
                            {
                                foreach (DataRow row in table.Rows)
                                {
                                    if (row.HasErrors)
                                    {
                                        string strKey = "";
                                        foreach (DataColumn col in table.PrimaryKey)
                                        {
                                            strKey += row[col].ToString() + "/";
                                        }
                                        result.EmpileErreur("Error while deleting (" + table.TableName + "[" +
                                                            strKey + "] : " + row.RowError);
                                    }
                                }
                            }
                        }
                    }
                }
            }
            return(result);
        }