Example #1
0
        public override CResultAErreur TraitementAvantSauvegarde(CContexteDonnee contexte)
        {
            CResultAErreur result = base.TraitementAvantSauvegarde(contexte);

            if (!result)
            {
                return(result);
            }

            DataTable table = contexte.Tables[GetNomTable()];

            if (table == null)
            {
                return(result);
            }

            ArrayList lstRows = new System.Collections.ArrayList(table.Rows);

            foreach (DataRow row in lstRows)
            {
                if (row.RowState == DataRowState.Deleted)
                {
                    Int32           nId            = (int)row[CSpvParamSysteme.c_champPARAM_ID, DataRowVersion.Original];
                    CSpvAccesAlarme spvAccesAlarme = new CSpvAccesAlarme(contexte);
                    if (spvAccesAlarme.ReadIfExists(new CFiltreData(CSpvAcces.c_champACCES_CATEGORIE + "=@1", nId)))
                    {
                        result.EmpileErreur(I.T("This parameter cannot be deleted because it is used in access|50020"));
                    }
                }
            }
            return(result);
        }
        /*     public override IDataAdapter GetDataAdapter(DataRowState rowsPriseEnCharge, params string[] champsExclus)
         *   {
         *       IDataAdapter adapter = base.GetDataAdapter(rowsPriseEnCharge, champsExclus);
         *       C2iOracleDataAdapter oracleAdapter = adapter as C2iOracleDataAdapter;
         *       if (oracleAdapter != null)
         *       {
         *           oracleAdapter.RowUpdated += new OracleRowUpdatedEventHandler(OnRowUpdated);
         *       }
         *       return oracleAdapter;
         *   }
         *
         *   void OnRowUpdated(object sender, OracleRowUpdatedEventArgs e)
         *   {
         *       if (e.StatementType == StatementType.Insert)
         *       {
         *           CSpvLienAccesAlarme accesAccesc = new CSpvLienAccesAlarme(e.Row);
         *           OracleCommand cmd = e.Command.Connection.CreateCommand();
         *           cmd.Transaction = e.Command.Transaction;
         *           if (accesAccesc.Surveiller == false && accesAccesc.SpvAlarmgeree != null)
         *           {
         *               cmd.CommandText = "Begin SetMaskAdmAccess (" +
         *                   accesAccesc.Id + ",2); end;";
         *               cmd.ExecuteScalar();
         *           }
         *       }
         *   }*/

        public override CResultAErreur TraitementAvantSauvegarde(CContexteDonnee contexte)
        {
            CResultAErreur result = base.TraitementAvantSauvegarde(contexte);

            if (!result)
            {
                return(result);
            }

            DataTable table = contexte.Tables[GetNomTable()];

            if (table == null)
            {
                return(result);
            }

            try
            {
                ArrayList lstRows = new System.Collections.ArrayList(table.Rows);
                foreach (DataRow row in lstRows)
                {
                    if (row.RowState == DataRowState.Modified)
                    {
                        Int32 acces1OriginalId = (Int32)row[CSpvLienAccesAlarme.c_champACCES1_ID, DataRowVersion.Original];
                        Int32 acces1CurrentId  = (Int32)row[CSpvLienAccesAlarme.c_champACCES1_ID, DataRowVersion.Current];
                        Int32 acces2OriginalId = (Int32)row[CSpvLienAccesAlarme.c_champACCES2_ID, DataRowVersion.Original];
                        Int32 acces2CurrentId  = (Int32)row[CSpvLienAccesAlarme.c_champACCES2_ID, DataRowVersion.Current];

                        if (acces1OriginalId != acces1CurrentId)
                        {
                            CSpvAccesAlarme acces1Original = new CSpvAccesAlarme(contexte);
                            if (acces1Original.ReadIfExists(acces1OriginalId))
                            {
                                acces1Original.AccesEtat = acces1Original.AccesEtat & 0xE;
                            }
                        }

                        if (acces2OriginalId != acces2CurrentId)
                        {
                            CSpvAccesAlarme acces2Original = new CSpvAccesAlarme(contexte);
                            if (acces2Original.ReadIfExists(acces2OriginalId))
                            {
                                acces2Original.AccesEtat = acces2Original.AccesEtat & 0xE;
                            }
                        }

                        // Mise à jour de la redondance de gravité dans l'enregistrement xxx_Rep.
                        CSpvLienAccesAlarme spvLienAccesAlarme = new CSpvLienAccesAlarme(row);
                        foreach (CSpvLienAccesAlarme_Rep spvLienAccesAlarmeRep in spvLienAccesAlarme.Acces_Accesc_Rep)
                        {
                            spvLienAccesAlarmeRep.CodeAlarmGrave = spvLienAccesAlarme.CodeGravite;
                        }

                        // Création du message à destination des IS lorsque la tempo
                        // de l'accès est modifiée
                        Int32?nOldDuree = (Int32?)row[CSpvLienAccesAlarme.c_champALARMGEREE_MIN, DataRowVersion.Original];
                        Int32?nNewDuree = spvLienAccesAlarme.DureeMin;
                        if (nOldDuree != null && nNewDuree != null && nOldDuree != nNewDuree &&
                            spvLienAccesAlarme.AccesAlarmeTwo.SpvEquip != null &&
                            spvLienAccesAlarme.AccesAlarmeTwo.SpvEquip.TypeEquipement.Id == CSpvTypeq.c_TypeCarteGTRId)
                        {
                            CSpvMessalrm spvMessAlrm = new CSpvMessalrm(contexte);
                            spvMessAlrm.CreateNewInCurrentContexte();
                            spvMessAlrm.MessageModifTempoPourSaturneIS(
                                spvLienAccesAlarme.AccesAlarmeTwo.SpvEquip.CommentairePourSituer,
                                spvLienAccesAlarme.AccesAlarmeTwo.NomAcces);
                        }
                    }

                    if (row.RowState == DataRowState.Added || row.RowState == DataRowState.Modified)
                    {
                        CSpvLienAccesAlarme spvLienAccesAlarme = new CSpvLienAccesAlarme(row);

                        CSpvAccesAlarme acces1 = new CSpvAccesAlarme(contexte);
                        CSpvAccesAlarme acces2 = new CSpvAccesAlarme(contexte);

                        if (acces1.ReadIfExists(spvLienAccesAlarme.AccesAlarmeOne.Id))
                        {
                            acces1.AccesEtat = acces1.AccesEtat | 1;
                        }

                        if (acces2.ReadIfExists(spvLienAccesAlarme.AccesAlarmeTwo.Id))
                        {
                            acces2.AccesEtat = acces2.AccesEtat | 1;
                        }


                        if (row.RowState == DataRowState.Added)
                        {
                            /*
                             * if (acces1.ReadIfExists(spvAccesAccesc.AccesAlarmeOne.Id))
                             *  spvAccesAccesc.SpvAlarmgeree = acces1.AlarmeGeree();*/

                            /* Sans doute ajouté pour le cas particulier des équipements de médiation
                             * à revoir car perturbe tous les autres cas
                             * if (spvLienAccesAlarme.AccesAlarmeOne != spvLienAccesAlarme.SpvAccesAlarmeSysteme0())
                             * {
                             *  spvLienAccesAlarme.SpvAlarmgeree = spvLienAccesAlarme.AccesAlarmeOne.AlarmeGeree();
                             *  spvLienAccesAlarme.BindingId = -3;  // Rechercher l'ID dans le before save
                             * }*/

                            CSpvLienAccesAlarme_Rep lienTest = new CSpvLienAccesAlarme_Rep(contexte);
                            if (!lienTest.ReadIfExists(spvLienAccesAlarme.Id))
                            {
                                CSpvLienAccesAlarme_Rep spvLienAccesAlarmeRep = new CSpvLienAccesAlarme_Rep(contexte);
                                if (!spvLienAccesAlarmeRep.ReadIfExists(spvLienAccesAlarme.Id))
                                {
                                    spvLienAccesAlarmeRep.LienAccesAlarmes = spvLienAccesAlarme;
                                    spvLienAccesAlarmeRep.CodeAlarmGrave   = spvLienAccesAlarme.CodeGravite;
                                    spvLienAccesAlarmeRep.CreateNewInCurrentContexte(new object[] { spvLienAccesAlarme.Id });

                                    if (spvLienAccesAlarme.SpvEquip != null &&
                                        spvLienAccesAlarme.SpvEquip.TypeEquipement.Id == CSpvTypeq.c_TypeEquipMediationId)
                                    {
                                        // Ne pas revalider la propriété AlarmCategory sur CSpvLienAccesAlarme_Rep
                                        // elle pose problème avec la contrainte check lorsque le framework
                                        // la remplit automatiquement avec espace lorsqu'elle est null.
                                        spvLienAccesAlarmeRep.Row[CSpvLienAccesAlarme_Rep.c_champALARM_CL] = CSpvEvenementReseau.c_strClasseSYST;
                                        int nAlarmNumObj = Convert.ToInt32(spvLienAccesAlarme.SpvEquip.IndexSnmp);
                                        spvLienAccesAlarmeRep.AlarmNumObj = nAlarmNumObj;
                                        spvLienAccesAlarmeRep.AlarmNumAl  = spvLienAccesAlarme.SpvEquip.CommentairePourSituer;
                                        //Vérifier que les alarmes système fonctionnent sans la mise à jour
                                        //ci-dessous
                                        //spvLienAccesAlarmeRep.EQUIP_ID = spvLienAccesAlarme.SpvEquip.Id;
                                    }
                                }
                            }
                        }
                        else if (row.RowState == DataRowState.Modified)
                        {
                            // Constitution du message pour EmessEM
                            bool  bOldASurveiller = (bool)row[CSpvLienAccesAlarme.c_champALARMGEREE_TOSURV, DataRowVersion.Original];
                            bool  bNewASurveiller = spvLienAccesAlarme.Surveiller;
                            Int32?nOldDureeMin    = (Int32?)row[CSpvLienAccesAlarme.c_champALARMGEREE_MIN, DataRowVersion.Original];
                            Int32?nNewDureeMin    = spvLienAccesAlarme.DureeMin;
                            Int32?nOldFreqPeriode = (Int32?)row[CSpvLienAccesAlarme.c_champALARMGEREE_FREQD, DataRowVersion.Original];
                            Int32?nNewFreqPeriode = spvLienAccesAlarme.FreqPeriod;
                            Int32?nOldFreqNb      = (Int32?)row[CSpvLienAccesAlarme.c_champALARMGEREE_FREQN, DataRowVersion.Original];
                            Int32?nNewFreqNb      = spvLienAccesAlarme.FreqNb;

                            if (bOldASurveiller != bNewASurveiller ||
                                nOldDureeMin != nNewDureeMin ||
                                nOldFreqPeriode != nNewFreqPeriode ||
                                nOldFreqNb != nNewFreqNb)
                            {
                                CSpvMessem spvMessem = new CSpvMessem(contexte);
                                spvMessem.CreateNewInCurrentContexte();
                                if (!spvMessem.FormatMessAccesAlarme(spvLienAccesAlarme, row.RowState))
                                {
                                    spvMessem.CancelCreate();
                                }
                            }
                        }
                    }

                    if (row.RowState == DataRowState.Deleted)
                    {
                        Int32 acces1OriginalId = (Int32)row[CSpvLienAccesAlarme.c_champACCES1_ID, DataRowVersion.Original];
                        Int32 acces2OriginalId = (Int32)row[CSpvLienAccesAlarme.c_champACCES2_ID, DataRowVersion.Original];

                        CSpvAccesAlarme acces1Original = new CSpvAccesAlarme(contexte);
                        if (acces1Original.ReadIfExists(acces1OriginalId))
                        {
                            acces1Original.AccesEtat = acces1Original.AccesEtat & 0xE;
                        }

                        CSpvAccesAlarme acces2Original = new CSpvAccesAlarme(contexte);
                        if (acces2Original.ReadIfExists(acces2OriginalId))
                        {
                            acces2Original.AccesEtat = acces2Original.AccesEtat & 0xE;
                        }

                        Int32 nMaskBriMin =
                            (Int32)row[CSpvLienAccesAlarme.c_champMSKBRI_MIN, DataRowVersion.Original];

                        Int32 nMaskAdmMin =
                            (Int32)row[CSpvLienAccesAlarme.c_champMSKADM_MIN, DataRowVersion.Original];


                        // Construction des messages de démasquage accès alarme
                        if (nMaskBriMin > 0 || nMaskAdmMin > 0)
                        {
                            Int32 nSiteId = -1;
                            if (row[CSpvLienAccesAlarme.c_champSITE_ID, DataRowVersion.Original] != DBNull.Value)
                            {
                                nSiteId = (Int32)row[CSpvLienAccesAlarme.c_champSITE_ID, DataRowVersion.Original];
                            }

                            Int32 nEquipId = -1;
                            if (row[CSpvLienAccesAlarme.c_champEQUIP_ID, DataRowVersion.Original] != DBNull.Value)
                            {
                                nEquipId = (Int32)row[CSpvLienAccesAlarme.c_champEQUIP_ID, DataRowVersion.Original];
                            }

                            Int32 nLiaiId = -1;
                            if (row[CSpvLienAccesAlarme.c_champLIAI_ID, DataRowVersion.Original] != DBNull.Value)
                            {
                                nLiaiId = (Int32)row[CSpvLienAccesAlarme.c_champLIAI_ID, DataRowVersion.Original];
                            }

                            Int32 nAccesAccescId =
                                (Int32)row[CSpvLienAccesAlarme.c_champACCES_ACCESC_ID, DataRowVersion.Original];

                            CSpvMessalrm spvMessAlrm;
                            if (nMaskBriMin > 0)
                            {
                                spvMessAlrm = new CSpvMessalrm(contexte);
                                spvMessAlrm.CreateNewInCurrentContexte();
                                spvMessAlrm.MessageMasquageAlarme(" ", 0, nAccesAccescId.ToString(),
                                                                  (int)EEvenementMasquage.FinMasquageBrigadier, nSiteId, nEquipId, nLiaiId, "");
                            }
                            else
                            {
                                spvMessAlrm = new CSpvMessalrm(contexte);
                                spvMessAlrm.CreateNewInCurrentContexte();
                                spvMessAlrm.MessageMasquageAlarme(" ", 0, nAccesAccescId.ToString(),
                                                                  (int)EEvenementMasquage.FinMasquageAdministrateur, nSiteId, nEquipId, nLiaiId, "");
                            }
                        }

                        // Construction des messages à destination de EmessEM
                        CSpvLienAccesAlarme spvLienAccesAlarme = new CSpvLienAccesAlarme(row);
                        spvLienAccesAlarme.VersionToReturn = DataRowVersion.Original;
                        CSpvMessem spvMessem = new CSpvMessem(contexte);
                        spvMessem.CreateNewInCurrentContexte();
                        if (!spvMessem.FormatMessAccesAlarme(spvLienAccesAlarme, DataRowState.Deleted))
                        {
                            spvMessem.CancelCreate();
                        }
                    }
                }
            }
            catch (Exception e)
            {
                result.EmpileErreur(e.Message);
            }
            return(result);
        }