//------------------------------------------------------------
        public CResultAErreur PurgeEntites(Type typeObjets, int[] lstIds)
        {
            CResultAErreur   result  = CResultAErreur.True;
            CSessionClient   session = CSessionClient.GetSessionForIdSession(IdSession);
            IInfoUtilisateur info    = session != null?session.GetInfoUtilisateur() : null;

            if (info == null)
            {
                result.EmpileErreur(I.T("Invalid session in Purge entities|20014"));
                return(result);
            }
            if (info.GetDonneeDroit(CDroitDeBaseSC2I.c_droitAdministrationSysteme) == null)
            {
                result.EmpileErreur(I.T("Purge entity is allowed to administrators only|20015"));
                return(result);
            }
            result = session.BeginTrans();
            if (!result)
            {
                return(result);
            }
            CDonneeNotificationModificationContexteDonnee dataModif = new CDonneeNotificationModificationContexteDonnee(IdSession);

            result = PurgeEntites(typeObjets, lstIds, dataModif);
            if (result)
            {
                CEnvoyeurNotification.EnvoieNotifications(new IDonneeNotification[] { dataModif });
                result = session.CommitTrans();
            }
            else
            {
                session.RollbackTrans();
            }
            return(result);
        }
        //------------------------------------------------------
        static void racine_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.Alt && e.Shift && e.KeyCode == Keys.F7)
            {
                CSessionClient   session = CSessionClient.GetSessionUnique();
                IInfoUtilisateur info    = session != null?session.GetInfoUtilisateur() : null;

                if (info != null)
                {
                    if (info.GetDonneeDroit(CDroitDeBaseSC2I.c_droitInterface) != null)
                    {
                        CSetupVisibiliteControles setup = new CSetupVisibiliteControles();
                        Control ctrl = sender as Control;
                        if (ctrl != null)
                        {
                            Form frm = ctrl.FindForm();
                            if (frm != null)
                            {
                                setup = GetSetupForWindow(session, frm);
                                CFormSetupFenetreDynamique.ShowArbre(frm, setup);
                                SetSetupForWindow(session, frm, setup);
                                setup.Apply(frm, false);
                            }
                        }
                    }
                }
            }
        }
        /// //////////////////////////////////////////
        public CResultAErreur OpenSession(
            IAuthentificationSession authentification,
            string strDescription,
            CSessionClient sessionParente)
        {
            CResultAErreur result = CResultAErreur.True;

            if (sessionParente != null)
            {
                m_sessionParente = sessionParente;
                m_sponsor.Register(m_sessionParente);
                IInfoUtilisateur info = sessionParente.GetInfoUtilisateur();
                if (info != null)
                {
                    m_strNomUtilisateurSource = info.NomUtilisateur;
                }
                ConfigurationsImpression = sessionParente.ConfigurationsImpression;
            }
            else
            {
                m_strNomUtilisateurSource = I.T("Unknown|10000");
            }
            ///////////////////////////////////////////////

            return(base.OpenSession(authentification,
                                    strDescription,
                                    ETypeApplicationCliente.Process));
        }
        //------------------------------------------------------
        public static void AppliqueToForm(Form racine)
        {
            if (racine == null)
            {
                return;
            }
            racine.KeyPreview = true;
            racine.KeyDown   -= m_handlerKey;

            CSessionClient   session = CSessionClient.GetSessionUnique();
            IInfoUtilisateur info    = session != null?session.GetInfoUtilisateur() : null;

            bool bIsAdmin = false;

            if (info != null)
            {
                if (info.GetDonneeDroit(CDroitDeBaseSC2I.c_droitInterface) != null)
                {
                    bIsAdmin        = true;
                    racine.KeyDown += m_handlerKey;
                }
            }
            CSetupVisibiliteControles setup = GetSetupForWindow(session, racine);

            if (setup != null && (
                    !bIsAdmin ||
                    (GetKeyState(0x10) & 0xF000) != 0xF000 || //SHIFT
                    (GetKeyState(0x12) & 0xF000) != 0xF000))  //ALT
            {
                setup.Apply(racine, false);
            }
        }
Example #5
0
        //---------------------------------------------------------------------------------------------
        public CUserTimosWebApp(CSessionClient session, DataRow row, string strLogin)
        {
            if (session != null)
            {
                IInfoUtilisateur infosUser = session.GetInfoUtilisateur();
                if (infosUser != null)
                {
                    row[c_champUserName]  = infosUser.NomUtilisateur;
                    row[c_champUserLogin] = strLogin;
                    row[c_champUserKey]   = infosUser.KeyUtilisateur.StringValue;
                    row[c_champSessionId] = session.IdSession;
                    bool   bIsAdministrator  = false;
                    CDbKey keyGroupeAdminWeb = CTimosWebAppRegistre.WebAdminGroupKey;
                    if (keyGroupeAdminWeb != null && infosUser.ListeKeysGroupes.Contains(keyGroupeAdminWeb))
                    {
                        bIsAdministrator = true;
                    }
                    row[c_champIsAdministrator] = bIsAdministrator;

                    m_row = row;

                    m_dicoProperties = new Dictionary <string, object>();
                    m_dicoProperties[c_champUserName]        = infosUser.NomUtilisateur;
                    m_dicoProperties[c_champUserLogin]       = strLogin;
                    m_dicoProperties[c_champUserKey]         = infosUser.KeyUtilisateur.StringValue;
                    m_dicoProperties[c_champSessionId]       = session.IdSession;
                    m_dicoProperties[c_champIsAdministrator] = bIsAdministrator;
                }
            }
        }
Example #6
0
        public CResultAErreur DémarreWorkflow(CTypeEtapeWorkflow typeEtapeDebut, bool bStartImmediate)
        {
            CSessionClient   session = CSessionClient.GetSessionForIdSession(ContexteDonnee.IdSession);
            IInfoUtilisateur info    = session != null?session.GetInfoUtilisateur() : null;

            if (info != null)
            {
                //TESTDBKEYOK
                KeyManager = info.KeyUtilisateur;
            }
            CResultAErreur result = CResultAErreur.True;

            if (EtapesEnCours.Count != 0)
            {
                result.EmpileErreur(I.T("Workflow was already started|20073"));
                return(result);
            }
            if (typeEtapeDebut == null ||
                typeEtapeDebut.Workflow != TypeWorkflow//cas pourri : l'étape de début n'est pas valide pour ce workflow ça ne doit pas arriver
                )
            {
                if (TypeWorkflow == null)
                {
                    result.EmpileErreur(I.T("Workflow type should be set before it starts|20077"));
                    return(result);
                }
                typeEtapeDebut = TypeWorkflow.EtapeDemarrageDefaut;
                if (typeEtapeDebut == null)
                {
                    result.EmpileErreur(I.T("Workflow type @1 doesn't have any start point|20074",
                                            TypeWorkflow != null?TypeWorkflow.Libelle:"???"));
                    return(result);
                }
            }
            using (CContexteDonnee ctx = new CContexteDonnee(ContexteDonnee.IdSession, true, false))
            {
                ///Si bStartImmediate, travaille dans un contexte spécifique qui est sauvé tout de suite
                CContexteDonnee contexteDeTravail = bStartImmediate ? ctx : ContexteDonnee;
                CWorkflow       wkf = GetObjetInContexte(contexteDeTravail) as CWorkflow;
                typeEtapeDebut = typeEtapeDebut.GetObjetInContexte(contexteDeTravail) as CTypeEtapeWorkflow;
                CResultAErreurType <CEtapeWorkflow> resEtape = wkf.CreateOrGetEtapeInCurrentContexte(typeEtapeDebut);
                if (resEtape)
                {
                    CEtapeWorkflow etape = resEtape.DataType;
                    etape.DemandeDemarrageInCurrentContext(null);
                }
                else
                {
                    result.EmpileErreur(resEtape.Erreur);
                }
                IsRunning = true;
                RunGeneration++;
                if (result && bStartImmediate)
                {
                    result = ctx.SaveAll(true);
                }
            }
            return(result);
        }
Example #7
0
        public CInfoSessionAsDynamicClass[] GetInfosSessionsActives()
        {
            List <CInfoSessionAsDynamicClass> lst = new List <CInfoSessionAsDynamicClass>();

            int[] listeIdSessions = GetListeIdSessionsConnectees();
            foreach (int nId in listeIdSessions)
            {
                CInfoSessionAsDynamicClass infoSession = new CInfoSessionAsDynamicClass();
                infoSession.IdSession = nId;

                CDbKey       keyUtilisateur = null;
                IInfoSession session        = GetSessionClient(nId);
                try
                {
                    session.GetInfoUtilisateur();
                }
                catch
                {
                    session = GetSessionClientSurServeur(nId);
                    infoSession.Invalide = true;
                    session = GetSessionClientSurServeur(nId);
                }
                if (session == null)
                {
                    infoSession.Invalide = true;
                    session = GetSessionClientSurServeur(nId);
                    infoSession.NomUtilisateur = I.T("ACCESS ERROR|20000");
                }

                try
                {
                    infoSession.NomUtilisateur = session.GetInfoUtilisateur().NomUtilisateur;
                    IInfoUtilisateur info = session.GetInfoUtilisateur();
                    //TESTDBKEYOK
                    keyUtilisateur             = info.KeyUtilisateur;
                    infoSession.KeyUtilisateur = info.KeyUtilisateur;
                    DateTime dt = session.DateHeureConnexion;
                    infoSession.DateDebutConnexion   = dt;
                    infoSession.DateDerniereActivité = session.DateHeureDerniereActivite;
                    infoSession.LibelleSession       = session.DescriptionApplicationCliente;
                }
                catch
                {
                    if (nId == 0)
                    {
                        infoSession.NomUtilisateur = I.T("Server|20001");
                    }
                    else
                    {
                        infoSession.Invalide       = true;
                        infoSession.NomUtilisateur = I.T("ACCESS ERROR|20000");
                    }
                }
                infoSession.IsSystem = keyUtilisateur == null;
                lst.Add(infoSession);
            }
            return(lst.ToArray());
        }
Example #8
0
 /// //////////////////////////////////////////////////////////////////
 public CCacheInfoUtilisateurSurClient(int nIdSession, IInfoUtilisateur infoServeur)
 {
     m_nIdSession = nIdSession;
     m_infoUtilisateurSurServeur = infoServeur;
     m_sponsor.Register(m_infoUtilisateurSurServeur);
     InitFromInfoServeur();
     m_recepteurNotificationChangementDroit = new CRecepteurNotification(m_nIdSession, typeof(CDonneeNotificationChangementDroitUtilisateur));
     m_recepteurNotificationChangementDroit.OnReceiveNotification += new NotificationEventHandler(OnNotificationChangementDroit);
 }
Example #9
0
        //---------------------------------------------------------
        /// <summary>
        /// Stocke les informations de fin d'étape dans l'étape
        /// <BR></BR>Cette méthode ne doit pas être utilisée en dehors d'un appel par l'objet serveur
        /// </summary>
        /// <returns></returns>
        public CResultAErreur InternalSetInfosTerminéeInCurrentContexte(EEtatEtapeWorkflow etat)
        {
            DateFin = DateTime.Now;
            CSessionClient   session = CSessionClient.GetSessionForIdSession(ContexteDonnee.IdSession);
            IInfoUtilisateur info    = session != null?session.GetInfoUtilisateur() : null;

            //TESTDBKEYOK
            KeyTermineur = info != null ? info.KeyUtilisateur : null;
            EtatCode     = (int)etat;
            return(CResultAErreur.True);
        }
Example #10
0
 /// //////////////////////////////////////////////////////////////////
 public void Dispose()
 {
     m_sponsor.Unregister(m_infoUtilisateurSurServeur);
     m_infoUtilisateurSurServeur = null;
     m_sponsor.Dispose();
     m_sponsor = null;
     if (m_recepteurNotificationChangementDroit != null)
     {
         m_recepteurNotificationChangementDroit.Dispose();
     }
     m_recepteurNotificationChangementDroit = null;
 }
Example #11
0
        public static bool UtilisateurConnecteIsUserManager(CContexteDonnee ctx)
        {
            IDonneeDroitUtilisateur data    = null;
            CSessionClient          session = CSessionClient.GetSessionForIdSession(ctx.IdSession);

            if (session != null)
            {
                IInfoUtilisateur infoUser = session.GetInfoUtilisateur();
                if (infoUser != null)
                {
                    data = infoUser.GetDonneeDroit(CDroitDeBase.c_droitBaseGestionUtilisateurs);
                }
            }
            return(data != null);
        }
Example #12
0
        /// //////////////////////////////////////////////////
        protected override void MyInitValeurDefaut()
        {
            DateCreation = DateTime.Now;
            CSessionClient   session = CSessionClient.GetSessionForIdSession(ContexteDonnee.IdSession);
            IInfoUtilisateur info    = session != null?session.GetInfoUtilisateur() : null;

            //TESTDBKEYOK
            if (info != null)
            {
                KeyManager = info.KeyUtilisateur;
            }
            else
            {
                KeyManager = null;
            }
            IsRunning     = false;
            RunGeneration = 0;
        }
        //------------------------------------------------------
        public void InitForObjet(CObjetDonneeAIdNumerique objet, CVersionDonnees version)
        {
            CSessionClient   session = CSessionClient.GetSessionForIdSession(objet.ContexteDonnee.IdSession);
            IInfoUtilisateur info    = session.GetInfoUtilisateur();

            if (info != null)
            {
                m_bCanRestore = info.GetDonneeDroit(CDroitDeBaseSC2I.c_droitAdministration) != null;
            }
            m_bCanRestore         &= version != null && version.TypeVersion.Code == CTypeVersion.TypeVersion.Archive;
            m_panelRestore.Visible = m_bCanRestore;

            if (m_contexteDonnees != null)
            {
                m_contexteDonnees.Dispose();
            }
            m_tableValeurs.Clear();
            m_objetDepart = null;
            m_version     = null;
            m_arbreObjet.Nodes.Clear();
            if (objet == null || version == null)
            {
                return;
            }
            m_contexteDonnees = new CContexteDonnee(objet.ContexteDonnee.IdSession, true, false);
            m_contexteDonnees.SetVersionDeTravail(-1, false);            //Travaille sur toutes les versions
            m_objetDepart = (CObjetDonneeAIdNumerique)m_contexteDonnees.GetObjetInThisContexte(objet);
            m_version     = (CVersionDonnees)m_contexteDonnees.GetObjetInThisContexte(version);

            List <int> lstIds = new List <int>();

            if (m_version.TypeVersion.Code == CTypeVersion.TypeVersion.Previsionnelle)
            {
                CVersionDonnees verTmp = m_version.VersionParente;
                while (verTmp != null)
                {
                    lstIds.Add(verTmp.Id);
                    verTmp = verTmp.VersionParente;
                }
            }
            m_nIdsVersionsSuccessives = lstIds.ToArray();

            CreateNodeObjet(m_arbreObjet.Nodes, m_objetDepart);
        }
Example #14
0
        public static void AddToMenuParent(ToolStripMenuItem menu, string strContexte, object objet)
        {
            if (objet == null)
            {
                return;
            }

            CModeleTexte modeleSel = CTimosAppRegistre.GetModeleTexteForType(strContexte, objet.GetType());

            CListeObjetsDonnees liste = new CListeObjetsDonnees(CSc2iWin32DataClient.ContexteCourant, typeof(CModeleTexte));

            liste.Filtre = new CFiltreData(CModeleTexte.c_champTypeAssocie + "=@1",
                                           objet.GetType().ToString());
            foreach (CModeleTexte modele in liste)
            {
                CMenuModeleTexte menuModele = new CMenuModeleTexte(modele, strContexte, objet);
                if (modeleSel != null && modele.Id == modeleSel.Id)
                {
                    menuModele.Checked = true;
                }
                menuModele.MouseUp += new MouseEventHandler(menuModele.menuModele_MouseUp);
                menu.DropDownItems.Add(menuModele);
            }

            CSessionClient session = CSessionClient.GetSessionForIdSession(CSc2iWin32DataClient.ContexteCourant.IdSession);

            if (session != null)
            {
                IInfoUtilisateur info = session.GetInfoUtilisateur();
                if (info != null && info.GetDonneeDroit(CDroitDeBaseSC2I.c_droitAdministration) != null)
                {
                    menu.DropDownItems.Add(new ToolStripSeparator());
                    CMenuModeleTexte menuModeleAdd = new CMenuModeleTexte(null, strContexte, objet);
                    menuModeleAdd.Text   = I.T("Add|124");
                    menuModeleAdd.Click += new EventHandler(menuModeleAdd.itemAddMenu_Click);
                    menu.DropDownItems.Add(menuModeleAdd);
                }
            }

            if (menu.DropDownItems.Count == 0)
            {
                menu.Visible = false;
            }
        }
Example #15
0
        /// //////////////////////////////////////////////////
        public override CResultAErreur TraitementApresSauvegarde(sc2i.data.CContexteDonnee contexte, bool bOperationReussie)
        {
            CResultAErreur result = CResultAErreur.True;

            result = base.TraitementApresSauvegarde(contexte, bOperationReussie);
            if (!result)
            {
                return(result);
            }
            DataTable      table = contexte.Tables[GetNomTable()];
            List <DataRow> lstRowsEtapesADemarrer = table == null ? null : table.ExtendedProperties[c_constEtapesADemarre] as List <DataRow>;

            if (lstRowsEtapesADemarrer != null && lstRowsEtapesADemarrer.Count > 0)
            {
                int?           nIdSessionMain = IdSession;
                CDbKey         keyUtilisateur = null;
                CSessionClient session        = CSessionClient.GetSessionForIdSession(IdSession);
                if (session != null)
                {
                    IInfoUtilisateur info = session.GetInfoUtilisateur();
                    //TESTDBKEYOK
                    if (info != null)
                    {
                        keyUtilisateur = info.KeyUtilisateur;
                    }
                    CSousSessionClient sousSession = session as CSousSessionClient;
                    if (sousSession != null)
                    {
                        nIdSessionMain = sousSession.RootSession.IdSession;
                    }
                }
                List <CParametresStartEtapeInPile> lstToStart = new List <CParametresStartEtapeInPile>();
                foreach (DataRow row in lstRowsEtapesADemarrer)
                {
                    //Ancien mode, avant 13/9/2013
                    //RunEtapeInThread ( (int)row[CEtapeWorkflow.c_champId]);
                    //TESTDBKEYOK
                    lstToStart.Add(new CParametresStartEtapeInPile(
                                       nIdSessionMain, (int)row[CEtapeWorkflow.c_champId], keyUtilisateur));
                }
                CPileExecutionEtapes.AddEtapesADemarrer(lstToStart.ToArray());
            }
            return(result);
        }
Example #16
0
        public static CActeur UtilisateurActuel(CContexteDonnee ctx)
        {
            CSessionClient session = CSessionClient.GetSessionForIdSession(ctx.IdSession);

            if (session != null)
            {
                IInfoUtilisateur infoUser = session.GetInfoUtilisateur();
                if (infoUser != null)
                {
                    CDonneesActeurUtilisateur data = new CDonneesActeurUtilisateur(ctx);
                    //TESTDBKEYOK
                    if (data.ReadIfExists(infoUser.KeyUtilisateur))
                    {
                        return(data.Acteur);
                    }
                }
            }
            return(null);
        }
Example #17
0
        private void AppliqueRestrictions()
        {
            IInfoUtilisateur infoUser = CTimosApp.SessionClient.GetInfoUtilisateur();

            if (infoUser != null)
            {
                int?nIdVersion = CSc2iWin32DataClient.ContexteCourant.IdVersionDeTravail;
                CListeRestrictionsUtilisateurSurType restrictions = infoUser.GetListeRestrictions(nIdVersion);

                if (restrictions != null)
                {
                    CRestrictionUtilisateurSurType rest;
                    rest = restrictions.GetRestriction(typeof(CTicket));

                    switch (rest.RestrictionGlobale)
                    {
                    case ERestriction.Aucune:
                        m_lnkNouveauTicket.Visible = true;
                        break;

                    case ERestriction.Hide:
                        m_lnkNouveauTicket.Visible = false;
                        break;

                    case ERestriction.NoCreate:
                        m_lnkNouveauTicket.Visible = false;
                        break;

                    case ERestriction.NoDelete:
                        m_lnkNouveauTicket.Visible = true;
                        break;

                    case ERestriction.ReadOnly:
                        m_lnkNouveauTicket.Visible = false;
                        break;

                    default:
                        m_lnkNouveauTicket.Visible = true;
                        break;
                    }
                }
            }
        }
Example #18
0
        //------------------------------------------------------------------------------------
        public void GetInfosPopup(IDonneeNotification donnee, ref bool bShouldDisplay, ref string strLibelle, ref Image image)
        {
            bShouldDisplay = false;
            CDonneeNotificationBesoinIntervention db = donnee as CDonneeNotificationBesoinIntervention;

            if (db == null)
            {
                return;
            }
            if (!db.IsDelete)
            {
                //TESTDBKEYOK
                IInfoUtilisateur info = CTimosApp.SessionClient.GetInfoUtilisateur();
                if (info != null && info.KeyUtilisateur == db.KeyUtilisateurConcerne)
                {
                    strLibelle     = db.Libelle;
                    image          = Resources.alerte;
                    bShouldDisplay = true;
                }
            }
        }
Example #19
0
 public static IDonneeDroitUtilisateur GetDonneeDroitForSession(int nIdSession, string strCodeDroit)
 {
     try
     {
         CSessionClient session = CSessionClient.GetSessionForIdSession(nIdSession);
         if (session == null)
         {
             return(null);
         }
         IInfoUtilisateur info = session.GetInfoUtilisateur();
         if (info == null)
         {
             return(null);
         }
         return(info.GetDonneeDroit(strCodeDroit));
     }
     catch
     {
     }
     return(null);
 }
Example #20
0
        //---------------------------------------------------------
        /// <summary>
        /// Stocke les différentes informations pour le démarrage d'une étape
        /// (date de début, date de fin à null, idDémarreur et IdTermineur à null)
        /// <BR></BR>Cette méthode ne doit pas être utilisée en dehors d'un appel par l'objet serveur
        /// </summary>
        /// <returns></returns>
        public CResultAErreur InternalSetInfosDemarrageInCurrentContext()
        {
            if (DateDebut != null && DateFin != null)
            {
                //Historise l'étape
                CEtapeWorkflowHistorique h = new CEtapeWorkflowHistorique(ContexteDonnee);
                h.CreateNewInCurrentContexte();
                h.DateDebut = DateDebut.Value;
                h.DateFin   = DateFin.Value;
                //TESTDBKEYOK
                h.KeyDémarreur      = KeyDémarreur;
                h.KeyTermineur      = KeyTermineur;
                h.CodesRetourString = CodesRetourString;
                h.EtatCode          = EtatCode;
                h.EtapeAppelante    = EtapeAppelante;
                h.Etape             = this;
                h.RunGeneration     = RunGeneration;
            }
            DateDebut     = DateTime.Now;
            RunGeneration = Workflow.RunGeneration;
            DateFin       = null;
            CodesRetour   = new string[0];
            CSessionClient session = CSessionClient.GetSessionForIdSession(ContexteDonnee.IdSession);

            if (session is CSousSessionClient)
            {
                session = ((CSousSessionClient)session).RootSession;
            }
            IInfoUtilisateur info = session != null?session.GetInfoUtilisateur() : null;

            KeyDémarreur = info != null ? info.KeyUtilisateur : null;
            KeyTermineur = null;
            EtatCode     = (int)EEtatEtapeWorkflow.ADemarrer;
            if (Workflow.EtapeAppelante != null && Workflow.EtapeAppelante.Etat.Code != EEtatEtapeWorkflow.Démarrée)
            {
                Workflow.EtapeAppelante.OnDemarrageDepuisSousWorkflow();
            }
            Workflow.IsRunning = true;
            return(CResultAErreur.True);
        }
Example #21
0
        /// ///////////////////////////////////////////////////
        public IInfoUtilisateur[] GetUtilisateursConnectes()
        {
            List <IInfoUtilisateur> lst = new List <IInfoUtilisateur>();

            lock (typeof(CLockerListeSessions))
            {
                foreach (CSessionClientSurServeur session in m_listeSessions.Values)
                {
                    try
                    {
                        IInfoUtilisateur user = session.GetInfoUtilisateur();
                        if (user != null && user.KeyUtilisateur != null)
                        {
                            lst.Add(user);
                        }
                    }
                    catch
                    {
                    }
                }
            }
            return(lst.ToArray());
        }
Example #22
0
        //---------------------------------------------------
        public static void EditeProjet(
            CProjet projet,
            bool bModeEdition,
            CFormEditionStandard formAppelante)
        {
            CFormQuickEditProjet form = new CFormQuickEditProjet();

            form.m_formAppelante = formAppelante;
            form.m_gestionnaireModeEdition.ModeEdition = bModeEdition;
            form.m_projet = projet;

            IInfoUtilisateur info = CTimosApp.SessionClient.GetInfoUtilisateur();

            if (info != null)
            {
                CRestrictionUtilisateurSurType restriction = info.GetRestrictionsSurObjet(projet, projet.ContexteDonnee.IdVersionDeTravail);
                if (restriction != null)
                {
                    form.m_listeRestrictions.SetRestriction(restriction);
                }
            }
            CListeRestrictionsUtilisateurSurType restrictionsEnPlus = CDroitEditionType.GetDroits(projet);

            if (restrictionsEnPlus != null)
            {
                form.m_listeRestrictions.Combine(restrictionsEnPlus);
            }

            CRestrictionUtilisateurSurType rest = form.m_listeRestrictions.GetRestriction(typeof(CProjet));

            form.m_gestionnaireModeEdition.ModeEdition = bModeEdition && (rest.RestrictionGlobale & ERestriction.ReadOnly) != ERestriction.ReadOnly;

            form.Location = new Point(Screen.PrimaryScreen.WorkingArea.Width / 2 - form.Width / 2,
                                      Screen.PrimaryScreen.WorkingArea.Height / 2 - form.Height / 2);
            form.ShowDialog();
            form.Dispose();
        }
        ///////////////////////////////////////////////////
        public override CResultAErreur TraitementAvantSauvegarde(CContexteDonnee contexte)
        {
            CResultAErreur result = base.TraitementAvantSauvegarde(contexte);

            CSessionClient session = CSessionClient.GetSessionForIdSession(IdSession);
            //Annule les modifications sur les champs interdits en modification
            DataTable table = contexte.Tables[GetNomTable()];
            //Objet témoin pour vérifier les valeurs non affectées
            CRelationElementAChamp_ChampCustom relTemoin = null;

            if (IdVersionDeTravail != null)            //Dans les versions, on ne stocke pas les créations de valeurs nulles
            {
                relTemoin = (CRelationElementAChamp_ChampCustom)contexte.GetNewObjetForTable(table);
                relTemoin.CreateNewInCurrentContexte();
            }
            if (table != null && session != null)
            {
                IInfoUtilisateur user = session.GetInfoUtilisateur();
                if (user != null)
                {
                    ArrayList       lst     = new ArrayList(table.Rows);
                    IElementAChamps lastElt = null;
                    CRestrictionUtilisateurSurType restDeBase    = null;
                    CRestrictionUtilisateurSurType restAppliquee = null;
                    foreach (DataRow row in lst)
                    {
                        CRelationElementAChamp_ChampCustom rel = (CRelationElementAChamp_ChampCustom)contexte.GetNewObjetForRow(row);
                        if (row.RowState == DataRowState.Added && relTemoin != null)
                        {
                            if (relTemoin.Valeur != null && relTemoin.Valeur.Equals(rel.Valeur) ||
                                relTemoin.Valeur == null && relTemoin.Valeur == null)
                            {
                                rel.CancelCreate();
                            }
                        }


                        if (row.RowState == DataRowState.Modified || row.RowState == DataRowState.Added)
                        {
                            if (restDeBase == null)
                            {
                                Type tp = rel.ElementAChamps.GetType();
                                restDeBase = user.GetRestrictionsSur(tp, contexte.IdVersionDeTravail);
                            }
                            if (restDeBase != null && rel.ElementAChamps.Equals(lastElt))
                            {
                                restAppliquee = restDeBase.Clone() as CRestrictionUtilisateurSurType;
                            }
                            //Vérifie qu'on a le droit
                            if (!rel.ElementAChamps.Equals(lastElt) && restAppliquee != null)
                            {
                                restAppliquee.ApplyToObjet(rel.ElementAChamps);
                            }
                            lastElt = rel.ElementAChamps;
                            if (restAppliquee != null)
                            {
                                ERestriction restChamp = restAppliquee.GetRestriction(rel.ChampCustom.CleRestriction);
                                if ((restChamp & ERestriction.ReadOnly) == ERestriction.ReadOnly)
                                {
                                    row.RejectChanges();
                                }
                            }
                        }
                    }
                }
            }
            if (relTemoin != null)
            {
                relTemoin.CancelCreate();
            }
            return(result);
        }
Example #24
0
        public bool StartWorkflowMultiSteps(ArrayList listEtapesToStart)
        {
            CSessionClient   session = CSessionClient.GetSessionForIdSession(ContexteDonnee.IdSession);
            IInfoUtilisateur info    = session != null?session.GetInfoUtilisateur() : null;

            if (info != null)
            {
                KeyManager = info.KeyUtilisateur;
            }
            CResultAErreur result = CResultAErreur.True;

            if (TypeWorkflow.Etapes.Count == 0)
            {
                if (EtapeAppelante != null)
                {
                    EtapeAppelante.EndEtapeNoSave();
                    return(true);
                }
            }
            foreach (object stepsPath in listEtapesToStart)
            {
                if (!(stepsPath is string))
                {
                    throw new Exception(I.T("Invalid parameter for 'StartWorkflowMultiSteps'. Parameter must be an array of steps type path (separated by points).|20106"));
                }
                string strPath      = (string)stepsPath;
                int    nPosPoint    = strPath.IndexOf('.');
                string strStepType  = "";
                string strSuitePath = "";
                if (nPosPoint > 0)
                {
                    strStepType  = strPath.Substring(0, nPosPoint);
                    strSuitePath = strPath.Substring(nPosPoint + 1);
                }
                else
                {
                    strStepType = strPath;
                }
                CTypeEtapeWorkflow typeEtape = null;
                if (strStepType.Trim().Length == 0)
                {
                    typeEtape = TypeWorkflow.EtapeDemarrageDefaut;
                }
                else
                {
                    CListeObjetsDonnees lst = TypeWorkflow.Etapes;
                    lst.Filtre = new CFiltreData(CTypeEtapeWorkflow.c_champIdUniversel + "=@1", strStepType);
                    if (lst.Count > 0)
                    {
                        typeEtape = lst[0] as CTypeEtapeWorkflow;
                    }
                    if (typeEtape == null)
                    {
                        throw new Exception(I.T("Step type @1 can not be found|20107"));
                    }
                }

                CResultAErreurType <CEtapeWorkflow> resEtape = CreateOrGetEtapeInCurrentContexte(typeEtape);
                if (resEtape)
                {
                    CEtapeWorkflow etape = resEtape.DataType;
                    etape.StartWithPath(strSuitePath);
                }
                else
                {
                    result.EmpileErreur(resEtape.Erreur);
                }
                IsRunning = true;
                RunGeneration++;
            }
            return(result);
        }
Example #25
0
        //----------------------------------------------------------------------------------
        public virtual CResultAErreur InsertDataInDataSet(
            IEnumerable list,
            DataSet ds,
            ITableExport tableParente,
            int[] nValeursCle,
            RelationAttribute relationToObjetParent,
            IElementAVariablesDynamiquesAvecContexteDonnee elementAVariablePourFiltres,
            CCacheValeursProprietes cacheValeurs,
            ITableExport tableFilleANePasCharger,
            bool bAvecOptimisation,
            CConteneurIndicateurProgression indicateur)
        {
            CResultAErreur result = CResultAErreur.True;

            if (NePasCalculer)
            {
                return(result);
            }
            if (tableParente != null && nValeursCle.Length == 0)
            {
                return(result);
            }
            DataTable table = ds.Tables[NomTable];

            if (table == null)
            {
                result.EmpileErreur(I.T("Table @1 doesn't exist|116", NomTable));
                return(result);
            }
            indicateur.SetInfo(I.T("Table @1|115", NomTable));
            if (nValeursCle.Length > 1 &&
                relationToObjetParent == null)
            {
                result.EmpileErreur(I.T("Error: Multiple child table loading without knowing the relation indicating how the parental link is established|117"));
                return(result);
            }



            DataColumn colFilleDeContrainte   = null;
            DataTable  tableFilleDeContrainte = null;

            if (tableParente != null)
            {
                if (ChampOrigine.TypeDonnee.IsArrayOfTypeNatif || !bAvecOptimisation ||
                    ChampOrigine is CDefinitionProprieteDynamiqueThis)
                {
                    //On est dans une relation fille
                    foreach (Constraint constraint in table.Constraints)
                    {
                        if (constraint is ForeignKeyConstraint)
                        {
                            ForeignKeyConstraint fkConst = (ForeignKeyConstraint)constraint;
                            if (fkConst.RelatedTable.TableName == tableParente.NomTable)
                            {
                                colFilleDeContrainte = fkConst.Columns[0];
                                break;
                            }
                        }
                    }
                    tableFilleDeContrainte = table;
                }
                else
                {
                    //On est dans une relation parente
                    DataTable tblP = ds.Tables[tableParente.NomTable];
                    foreach (Constraint contraint in tblP.Constraints)
                    {
                        if (contraint is ForeignKeyConstraint)
                        {
                            ForeignKeyConstraint fk = (ForeignKeyConstraint)contraint;
                            if (fk.RelatedTable.TableName == table.TableName)
                            {
                                colFilleDeContrainte   = fk.Columns[0];
                                tableFilleDeContrainte = tblP;
                                break;
                            }
                        }
                    }
                }
            }

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


            //Désactive les ids auto sur les objetDonneeAIdNumerique.
            //Car on utilise alors les valeurs de clé des éléments
            bool bUtiliserIdObjets = false;

            if (bAvecOptimisation && (ChampOrigine == null || ChampOrigine.NomPropriete.IndexOf('.') < 0 || !ChampOrigine.TypeDonnee.IsArrayOfTypeNatif))
            {
                if (list is CListeObjetsDonnees && (tableParente == null || colFilleDeContrainte == null))
                {
                    if (typeof(CObjetDonneeAIdNumerique).IsAssignableFrom(((CListeObjetsDonnees)list).TypeObjets))
                    {
                        table.PrimaryKey[0].AutoIncrement = false;
                        bUtiliserIdObjets = true;
                    }
                }
                if (list is ArrayList)
                {
                    ArrayList arrL = (ArrayList)list;
                    if (arrL.Count > 0 &&
                        typeof(CObjetDonneeAIdNumerique).IsAssignableFrom(arrL[0].GetType()))
                    {
                        table.PrimaryKey[0].AutoIncrement = false;
                        bUtiliserIdObjets = true;
                    }
                }
            }

            if (FiltreAAppliquer != null)
            {
                CListeObjetsDonnees listeObjetsDonnee = list as CListeObjetsDonnees;
                if (listeObjetsDonnee == null)//Tente de convertir en liste d'objets
                {
                    //Récupère le contexte de données
                    CContexteDonnee ctx = null;
                    foreach (object obj in list)
                    {
                        IObjetAContexteDonnee objACtx = obj as IObjetAContexteDonnee;
                        if (objACtx != null)
                        {
                            ctx = objACtx.ContexteDonnee;
                            break;
                        }
                    }
                    listeObjetsDonnee = CListeObjetsDonnees.CreateListFrom(ctx, list);
                }
                if (listeObjetsDonnee != null)
                {
                    list   = listeObjetsDonnee;
                    result = GetFiltreDataAAppliquer(elementAVariablePourFiltres);
                    if (!result)
                    {
                        result.EmpileErreur(I.T("Error in the filter of the table @1|119", NomTable));
                        return(result);
                    }
                    try
                    {
                        if (result.Data != null)
                        {
                            listeObjetsDonnee.Filtre = CFiltreData.GetAndFiltre(listeObjetsDonnee.Filtre, (CFiltreData)result.Data);
                        }
                    }
                    catch (Exception e)
                    {
                        result.EmpileErreur(new CErreurException(e));
                        result.EmpileErreur(I.T("Error during combination of table @1 filter|120", NomTable));
                        return(result);
                    }
                }
            }

            //Table fille->
            //si relation : Attribut relation (parente) représentant le lien entre la relation fille et cette tablle
            //Si donnée cumulée : true
            Hashtable tableTablesFillesToDependanceDirecte = new Hashtable();

            //Table parente->Champ fille contenant l'id
            Hashtable tableParentsCharges = new Hashtable();

            #region Optimisations des CListeObjetsDonnees


            if (bAvecOptimisation && list is CListeObjetsDonnees)
            {
                CListeObjetsDonnees listeObjets = (CListeObjetsDonnees)list;

                if (bUtiliserIdObjets)
                {
                    #region Identifie les tables filles qui peuvent être remplies en une seule requête.
                    //Identifie les sous tables qui peuvent être chargées en une seule fois :
                    //Il s'agit des sous tables liée directement à une propriété par
                    //des relations (attribut RelationFille ou Relation).
                    foreach (ITableExport tableFille in TablesFilles)
                    {
                        Type tpAnalyse = listeObjets.TypeObjets;
                        if (tableFille != tableFilleANePasCharger && (tableFille is C2iTableExportATableFille || tableFille is C2iTableExportCumulee))
                        {
                            if (tableFille.ChampOrigine is CDefinitionProprieteDynamiqueDonneeCumulee)
                            {
                                tableTablesFillesToDependanceDirecte[tableFille] = true;
                            }
                            else if (tableFille.ChampOrigine is CDefinitionProprieteDynamiqueRelationTypeId)
                            {
                                tableTablesFillesToDependanceDirecte[tableFille] = true;
                            }
                            else if (tableFille.ChampOrigine is CDefinitionProprieteDynamiqueThis)
                            {
                                tableTablesFillesToDependanceDirecte[tableFille] = true;
                            }
                            else if (tableFille.ChampOrigine != null)
                            {
                                string strPropOrigine = tableFille.ChampOrigine.NomProprieteSansCleTypeChamp;
                                if (strPropOrigine.IndexOf('.') < 0)
                                {
                                    //Seules les propriétés directes sont optimisées (pour le moment et peut être que ça suffit)
                                    PropertyInfo info = tpAnalyse.GetProperty(strPropOrigine);
                                    if (info != null)
                                    {
                                        object[] attribs = info.GetCustomAttributes(typeof(RelationFilleAttribute), true);
                                        if (attribs.Length > 0)
                                        {
                                            RelationFilleAttribute attrFille = (RelationFilleAttribute)attribs[0];
                                            tpAnalyse = attrFille.TypeFille;
                                            if (typeof(CObjetDonneeAIdNumerique).IsAssignableFrom(tpAnalyse))
                                            {
                                                info = tpAnalyse.GetProperty(attrFille.ProprieteFille);
                                                if (info != null)
                                                {
                                                    attribs = info.GetCustomAttributes(typeof(RelationAttribute), true);
                                                    if (attribs.Length > 0)
                                                    {
                                                        RelationAttribute attrParent = (RelationAttribute)attribs[0];
                                                        if (attrParent.ChampsFils.Length == 1)
                                                        {
                                                            tableTablesFillesToDependanceDirecte[tableFille] = attrParent;
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }

                    #endregion

                    #region Charges les tables parentes qui peuvent être chargées
                    if (typeof(CObjetDonneeAIdNumerique).IsAssignableFrom(listeObjets.TypeObjets))
                    {
                        string strNomTableFille = listeObjets.NomTable;
                        foreach (ITableExport tableParenteAOptimiser in TablesFilles)
                        {
                            if (tableParenteAOptimiser != tableFilleANePasCharger && tableParenteAOptimiser.ChampOrigine != null && !tableParenteAOptimiser.ChampOrigine.TypeDonnee.IsArrayOfTypeNatif)
                            {
                                if (IsOptimisable(tableParenteAOptimiser, TypeSource))
                                {
                                    CListeObjetsDonnees listeMere = listeObjets.GetDependances(tableParenteAOptimiser.ChampOrigine.NomProprieteSansCleTypeChamp);
                                    if (listeMere != null)
                                    {
                                        result = tableParenteAOptimiser.InsertDataInDataSet(
                                            listeMere,
                                            ds,
                                            null,
                                            0,
                                            elementAVariablePourFiltres,
                                            cacheValeurs,
                                            this,
                                            true,
                                            indicateur);
                                        if (!result)
                                        {
                                            return(result);
                                        }
                                        //Trouve le champ fille de lien
                                        foreach (Constraint contrainte in table.Constraints)
                                        {
                                            if (contrainte is ForeignKeyConstraint)
                                            {
                                                ForeignKeyConstraint fk = (ForeignKeyConstraint)contrainte;
                                                if (fk.RelatedTable.TableName == tableParenteAOptimiser.NomTable)
                                                {
                                                    tableParentsCharges[tableParenteAOptimiser] = fk.Columns[0].ColumnName;
                                                    break;
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                    #endregion
                }

                #region Identification des dépendances
                if (m_strDependancesToOptim == null)
                {
                    Hashtable tableDependances = new Hashtable();
                    AddProprietesOrigineDesChampsToTable(tableDependances, "", listeObjets.ContexteDonnee);
                    foreach (ITableExport tableFille in TablesFilles)
                    {
                        if (tableFille != tableFilleANePasCharger &&
                            !tableTablesFillesToDependanceDirecte.Contains(tableFille) &&
                            !tableParentsCharges.Contains(tableFille))
                        {
                            string strChemin = "";
                            if (ChampOrigine != null)
                            {
                                strChemin = ChampOrigine.NomPropriete;
                            }
                            if (tableFille.FiltreAAppliquer == null)
                            {
                                tableFille.AddProprietesOrigineDesChampsToTable(tableDependances, strChemin, listeObjets.ContexteDonnee);
                            }
                        }
                    }
                    m_strDependancesToOptim = new string[tableDependances.Count];
                    int nDep = 0;
                    foreach (string strOrigine in tableDependances.Keys)
                    {
                        m_strDependancesToOptim[nDep++] = strOrigine;
                    }
                }
                #endregion
            }


            #endregion

            indicateur.SetInfo(I.T("Table @1|115", NomTable));


            CFiltreData filtreDeBase = null;
            if (list is CListeObjetsDonnees)
            {
                filtreDeBase = ((CListeObjetsDonnees)list).Filtre;
            }

            ArrayList listeIds      = new ArrayList();
            string    strColonneCle = table.PrimaryKey[0].ColumnName;

            indicateur.SetBornesSegment(0, nValeursCle.Length);
            indicateur.SetValue(0);

            //Lecture par paquets de 1000 clés
            for (int n = 0; n < nValeursCle.Length; n += c_nNbLectureParLotFils)
            {
                if (bAvecOptimisation && (list is CListeObjetsDonnees) && relationToObjetParent != null)
                {
                    CListeObjetsDonnees listeObjets = (CListeObjetsDonnees)list;
                    StringBuilder       blCles      = new StringBuilder();
                    char cSepIn = ',';
                    if (filtreDeBase is CFiltreDataAvance)
                    {
                        cSepIn = ';';
                    }
                    for (int nCle = n; nCle < Math.Min(n + c_nNbLectureParLotFils, nValeursCle.Length); nCle++)
                    {
                        blCles.Append(nValeursCle[nCle]);
                        blCles.Append(cSepIn);
                    }
                    if (blCles.Length > 0)
                    {
                        blCles.Remove(blCles.Length - 1, 1);
                        string strCles = blCles.ToString();
                        if (filtreDeBase is CFiltreDataAvance)
                        {
                            listeObjets.Filtre = CFiltreData.GetAndFiltre(
                                filtreDeBase, new CFiltreDataAvance(
                                    listeObjets.NomTable,
                                    relationToObjetParent.ChampsFils[0] + " in {" + strCles + "}"));
                        }
                        else
                        {
                            listeObjets.Filtre = CFiltreData.GetAndFiltre(
                                filtreDeBase,
                                new CFiltreData(
                                    relationToObjetParent.ChampsFils[0] + " in (" + strCles.Replace(';', ',') + ")"));
                        }
                    }
                }
                if (indicateur.CancelRequest)
                {
                    result.EmpileErreur(I.T("Execution cancelled by the user|118"));
                    return(result);
                }
                if (list is CListeObjetsDonnees && m_strDependancesToOptim != null && m_strDependancesToOptim.Length > 0)
                {
                    ((CListeObjetsDonnees)list).ReadDependances(m_strDependancesToOptim);
                }
                int nCountTotal = 1;
                if (list is IList)
                {
                    nCountTotal = ((IList)list).Count;
                }
                else if (list is Array)
                {
                    nCountTotal = ((Array)list).Length;
                }
                indicateur.PushSegment(n, Math.Min(n + c_nNbLectureParLotFils, nValeursCle.Length));

                int nNbElements = 0;
                indicateur.SetBornesSegment(0, nCountTotal);
                int nFrequence = Math.Min(nCountTotal / 20, 500) + 1;

                CSessionClient   session  = CSessionClient.GetSessionUnique();
                IInfoUtilisateur infoUser = session != null?session.GetInfoUtilisateur() : null;


                ///AJOUT DES LIGNES DANS LA TABLE
                foreach (object obj in list)
                {
                    CRestrictionUtilisateurSurType restriction = null;
                    if (infoUser != null && obj != null)
                    {
                        restriction = infoUser.GetRestrictionsSur(obj.GetType(), obj is IObjetAContexteDonnee?((IObjetAContexteDonnee)obj).ContexteDonnee.IdVersionDeTravail:null);
                    }

                    nNbElements++;
                    if (nNbElements % nFrequence == 0)
                    {
                        indicateur.SetValue(nNbElements);
                        if (indicateur.CancelRequest)
                        {
                            result.EmpileErreur(I.T("Execution cancelled by the user|118"));
                            return(result);
                        }
                    }
                    bool bShouldImporte = true;

                    DataRow row = null;

                    if (bUtiliserIdObjets)
                    {
                        row            = table.Rows.Find(((CObjetDonneeAIdNumerique)obj).Id);
                        bShouldImporte = row == null;
                    }
                    if (bShouldImporte)
                    {
                        row = table.NewRow();
                        if (bUtiliserIdObjets)
                        {
                            int nId = ((CObjetDonneeAIdNumerique)obj).Id;
                            row[strColonneCle] = nId;
                            listeIds.Add(nId);
                        }

                        //Ajoute les valeurs de champs propres à cette table
                        result = InsereValeursChamps(obj, row, cacheValeurs, restriction);

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

                        if (colFilleDeContrainte != null && nValeursCle.Length > 0)
                        {
                            DataRow rowFille = row;
                            if (tableFilleDeContrainte == table)
                            {
                                if (relationToObjetParent == null)
                                {
                                    rowFille[colFilleDeContrainte] = nValeursCle[0];
                                }
                                else
                                {
                                    rowFille[colFilleDeContrainte] = ((CObjetDonnee)obj).Row[relationToObjetParent.ChampsFils[0]];
                                }
                            }
                        }
                        table.Rows.Add(row);
                    }
                    //Dans tous les cas, met à jour la table dépendante si besoin est !
                    if (colFilleDeContrainte != null && nValeursCle.Length > 0)
                    {
                        DataRow rowFille = row;
                        if (tableFilleDeContrainte != table)
                        {
                            rowFille = tableFilleDeContrainte.Rows.Find(nValeursCle[0]);
                            rowFille[colFilleDeContrainte] = row[strColonneCle];
                        }
                    }
                    if (bShouldImporte)
                    {
                        //AJout des données des sous tables non optimisées
                        foreach (ITableExport tbl in TablesFilles)
                        {
                            if (tbl.ChampOrigine != null && !tableTablesFillesToDependanceDirecte.Contains(tbl) && tbl != tableFilleANePasCharger)
                            {
                                bool bChildIsOptimisable = IsOptimisable(tbl, TypeSource);
                                //Impossible de lire en direct
                                object objet = null;
                                if (tbl.ChampOrigine is CDefinitionProprieteDynamiqueThis)
                                {
                                    objet = obj;
                                }
                                else
                                {
                                    objet = CInterpreteurProprieteDynamique.GetValue(obj, tbl.ChampOrigine, cacheValeurs).Data;
                                }
                                string strNomCol = (string)tableParentsCharges[tbl];
                                if (strNomCol != null)
                                {
                                    if (objet != null)
                                    {
                                        row[strNomCol] = ((CObjetDonneeAIdNumerique)objet).Id;
                                    }
                                    else
                                    {
                                        row[strNomCol] = DBNull.Value;
                                    }
                                }
                                else
                                {
                                    indicateur.PushSegment(nNbElements, nNbElements + 1);
                                    if (objet != null)
                                    {
                                        IEnumerable tempList;
                                        if (objet is IEnumerable)
                                        {
                                            tempList = (IEnumerable)objet;
                                        }
                                        else
                                        {
                                            ArrayList listeObjetUnique = new ArrayList();
                                            listeObjetUnique.Add(objet);
                                            tempList = listeObjetUnique;
                                        }
                                        if (tempList != null)
                                        {
                                            result = tbl.InsertDataInDataSet(
                                                tempList,
                                                ds,
                                                this,
                                                (int)row[table.PrimaryKey[0]],
                                                elementAVariablePourFiltres,
                                                cacheValeurs,
                                                this,
                                                bChildIsOptimisable,
                                                indicateur);
                                            if (!result)
                                            {
                                                return(result);
                                            }
                                        }
                                    }
                                    indicateur.PopSegment();
                                }
                            }
                        }
                        //vide le cache après chaque objet de la table principale
                        if (tableParente == null)
                        {
                            cacheValeurs.ResetCache();
                        }
                    }
                }
                indicateur.PopSegment();
            }
            indicateur.SetValue(nValeursCle.Length);

            ///Chargement des relations optimisées
            int nTable = 0;
            foreach (DictionaryEntry entry in tableTablesFillesToDependanceDirecte)
            {
                nTable++;
                ITableExport tableFille = (ITableExport)entry.Key;
                if (tableFille.ChampOrigine is CDefinitionProprieteDynamiqueDonneeCumulee)
                {
                    CDefinitionProprieteDynamiqueDonneeCumulee defCum = (CDefinitionProprieteDynamiqueDonneeCumulee)tableFille.ChampOrigine;
                    //Trouve les données cumulées correspondants aux éléments
                    CListeObjetsDonnees listeInit  = (CListeObjetsDonnees)list;
                    CTypeDonneeCumulee  typeCumule = new CTypeDonneeCumulee(listeInit.ContexteDonnee);
                    if (!typeCumule.ReadIfExists(
                            defCum.DbKeyTypeDonnee))
                    {
                        result.EmpileErreur(I.T("The cumulated data type @1 doesn't exist|122", defCum.DbKeyTypeDonnee.ToString()));
                        return(result);
                    }
                    RelationAttribute attr = typeCumule.GetRelationAttributeToType(listeInit.TypeObjets);
                    string            strChampIdOuDbKey = "";
                    if (defCum.DbKeyTypeDonnee.IsNumericalId())
                    {
                        strChampIdOuDbKey = CTypeDonneeCumulee.c_champId;
                    }
                    else
                    {
                        strChampIdOuDbKey = CObjetDonnee.c_champIdUniversel;
                    }

                    CListeObjetsDonnees listeFils = new CListeObjetsDonnees(
                        listeInit.ContexteDonnee,
                        typeof(CDonneeCumulee),
                        new CFiltreData(strChampIdOuDbKey + " = @1 ", defCum.DbKeyTypeDonnee.GetValeurInDb()));


                    listeFils.ModeSansTri = true;                    //Optimisation pour ne pas utiliser de dataview
                    result = tableFille.InsertDataInDataSet(
                        listeFils,
                        ds,
                        this,
                        (int[])listeIds.ToArray(typeof(int)),
                        attr,
                        elementAVariablePourFiltres,
                        cacheValeurs,
                        this,
                        true,
                        indicateur);
                    if (!result)
                    {
                        return(result);
                    }
                }
                else if (tableFille.ChampOrigine is CDefinitionProprieteDynamiqueRelationTypeId)
                {
                    CDefinitionProprieteDynamiqueRelationTypeId defTypeId = (CDefinitionProprieteDynamiqueRelationTypeId)tableFille.ChampOrigine;
                    RelationTypeIdAttribute relTpIdAttr = defTypeId.Relation;

                    //Trouve les données cumulées correspondants aux éléments
                    CListeObjetsDonnees listeInit = (CListeObjetsDonnees)list;
                    if (listeInit.Count != 0)
                    {
                        CListeObjetsDonnees listeFils = new CListeObjetsDonnees(
                            listeInit.ContexteDonnee,
                            CContexteDonnee.GetTypeForTable(relTpIdAttr.TableFille),
                            new CFiltreData(relTpIdAttr.ChampType + "=@1", listeInit.TypeObjets.ToString()));
                        listeFils.ModeSansTri = true;                        //Optimisation pour ne pas utiliser de dataview
                        RelationAttribute attrTmp = new RelationAttribute(
                            listeInit.NomTable,
                            ((CObjetDonneeAIdNumerique)listeInit[0]).GetChampId(),
                            relTpIdAttr.ChampId, false, false);
                        result = tableFille.InsertDataInDataSet(
                            listeFils,
                            ds,
                            this,
                            (int[])listeIds.ToArray(typeof(int)),
                            attrTmp,
                            elementAVariablePourFiltres,
                            cacheValeurs,
                            this,
                            true,
                            indicateur);
                        if (!result)
                        {
                            return(result);
                        }
                    }
                }
                else if (tableFille.ChampOrigine is CDefinitionProprieteDynamiqueThis)
                {
                    CListeObjetsDonnees listeInit = new CListeObjetsDonnees(
                        ((CListeObjetsDonnees)list).ContexteDonnee,
                        tableFille.ChampOrigine.TypeDonnee.TypeDotNetNatif, true);
                    listeInit.ModeSansTri = true;                    //Optimisation pour ne pas utiliser de dataview
                    string            strChampId = listeInit.ContexteDonnee.GetTableSafe(CContexteDonnee.GetNomTableForType(listeInit.TypeObjets)).PrimaryKey[0].ColumnName;
                    RelationAttribute attrTmp    = new RelationAttribute(
                        listeInit.NomTable,
                        strChampId,
                        strChampId,
                        false, false);
                    //Copie les clés dans la clé et dans la valeur de champ externe
                    result = tableFille.InsertDataInDataSet(
                        listeInit,
                        ds,
                        this,
                        (int[])listeIds.ToArray(typeof(int)),
                        attrTmp,
                        elementAVariablePourFiltres,
                        cacheValeurs,
                        this,
                        true,
                        indicateur);
                    if (!result)
                    {
                        return(result);
                    }
                }
                else if (tableFille.ChampOrigine != null)
                {
                    RelationAttribute   attr      = (RelationAttribute)entry.Value;
                    CListeObjetsDonnees listeFils = new CListeObjetsDonnees(
                        ((CListeObjetsDonnees)list).ContexteDonnee,
                        tableFille.ChampOrigine.TypeDonnee.TypeDotNetNatif, true);
                    listeFils.ModeSansTri = true;                    //Optimisation pour ne pas utiliser de dataview
                    result = tableFille.InsertDataInDataSet(
                        listeFils,
                        ds,
                        this,
                        (int[])listeIds.ToArray(typeof(int)),
                        attr,
                        elementAVariablePourFiltres,
                        cacheValeurs,
                        this,
                        true,
                        indicateur);
                    if (!result)
                    {
                        return(result);
                    }
                }
                else
                {
                    result = tableFille.InsertDataInDataSet(
                        null,
                        ds,
                        this,
                        (int[])listeIds.ToArray(typeof(int)),
                        null,
                        elementAVariablePourFiltres,
                        cacheValeurs,
                        this,
                        true,
                        indicateur);
                    if (!result)
                    {
                        return(result);
                    }
                }
            }

            return(result);
        }
        public CDefinitionProprieteDynamique[] GetDefinitionsChamps(CObjetPourSousProprietes objet, CDefinitionProprieteDynamique defParente)
        {
            List <CDefinitionProprieteDynamique> lstProps = new List <CDefinitionProprieteDynamique>();

            if (objet == null)
            {
                return(lstProps.ToArray());
            }

            Type tp = objet.TypeAnalyse;

            if (tp == null)
            {
                return(lstProps.ToArray());
            }
            if (!C2iFactory.IsInit())
            {
                return(lstProps.ToArray());
            }
            //Champs custom
            CRoleChampCustom role = CRoleChampCustom.GetRoleForType(tp);
            CRestrictionUtilisateurSurType rest = null;
            CSessionClient session = CSessionClient.GetSessionUnique();

            if (session != null)
            {
                IInfoUtilisateur info = session.GetInfoUtilisateur();
                if (info != null)
                {
                    rest = info.GetRestrictionsSur(tp, null);
                }
            }
            if (role != null)
            {
                CContexteDonnee     contexte    = CContexteDonneeSysteme.GetInstance();
                CListeObjetsDonnees listeChamps = CChampCustom.GetListeChampsForRole(contexte, role.CodeRole);
                foreach (CChampCustom champ in listeChamps)
                {
                    if (rest != null)
                    {
                        ERestriction restChamp = rest.GetRestriction(champ.CleRestriction);
                        if ((restChamp & ERestriction.Hide) == ERestriction.Hide)
                        {
                            continue;
                        }
                    }
                    if (champ.ListeValeurs.Count > 0)
                    {
                        CDefinitionProprieteDynamiqueChampCustomDisplayValue def = new CDefinitionProprieteDynamiqueChampCustomDisplayValue(champ);
                        if (champ.Categorie.Trim() != "")
                        {
                            def.Rubrique = champ.Categorie;
                        }
                        else
                        {
                            def.Rubrique = I.T("Complementary informations|59");
                        }
                        lstProps.Add(def);
                    }
                }
            }
            return(lstProps.ToArray());
        }
Example #27
0
        /// //////////////////////////////////////////////////
        ///Démarre une étape.
        ///Attention, un étape ne peut démarrer que si elle n'est pas déjà démarrée
        public void RunEtape(int nIdSessionMain, int nIdEtape)
        {
            CResultAErreur result  = CResultAErreur.True;
            CDbKey         keyUser = null;
            //Attend la fin des transactions en cours pour la session principale
            IDatabaseConnexion cnx = null;

            do
            {
                CSessionClient session = CSessionClient.GetSessionForIdSession(IdSession);
                if (session != null && session.IsConnected)
                {
                    IInfoUtilisateur info = session.GetInfoUtilisateur();
                    //TESTDBKEYTODO
                    if (info != null)
                    {
                        keyUser = info.KeyUtilisateur;
                    }
                    try
                    {
                        cnx = CSc2iDataServer.GetInstance().GetDatabaseConnexion(IdSession, typeof(CEtapeWorkflow));
                    }
                    catch //En cas d'erreur, c'est probablement que la session a été fermée, du coup, on peut y aller !
                    {
                        cnx = null;
                    }
                    System.Threading.Thread.Sleep(50);
                }
                else
                {
                    cnx = null;
                }
            }while (cnx != null && cnx.IsInTrans());
            lock (typeof(CLockerStartEtape))//S'assure que deux étapes ne démarrent pas en même temps !
            {
                List <CDonneeNotificationWorkflow> lstNotifications = new List <CDonneeNotificationWorkflow>();

                CAuthentificationSessionProcess auth = new CAuthentificationSessionProcess();

                using (CSessionClient sousSession = CSessionClient.CreateInstance())
                {
                    try
                    {
                        Console.WriteLine("Thread : " + System.Diagnostics.Process.GetCurrentProcess().Threads.Count);
                        sousSession.OpenSession(auth, "Workflow step " + nIdEtape, ETypeApplicationCliente.Process);
                        //TESTDBKEYTODO
                        if (keyUser != null)
                        {
                            sousSession.ChangeUtilisateur(keyUser);
                        }
                        using (CContexteDonnee ctx = new CContexteDonnee(sousSession.IdSession, true, true))
                        {
                            CEtapeWorkflow etape   = new CEtapeWorkflow(ctx);
                            int            nWaiter = 10;
                            while (!etape.ReadIfExists(nIdEtape) && nWaiter > 0)
                            {
                                //On ne trouve pas l'étape, c'est peut être que l'écriture en base n'est pas completement terminée
                                //On va retenter toutes les 2 secondes pendant 20 secondes, si elle n'existe jamais,
                                //c'est qu'il y a eu suppression (ou au moins non commit).
                                nWaiter--;
                                Thread.Sleep(2000);
                            }
                            if (etape.ReadIfExists(nIdEtape))
                            {
                                result         = etape.InternalSetInfosDemarrageInCurrentContext();
                                etape.EtatCode = (int)EEtatEtapeWorkflow.Démarrée;
                                result         = ctx.SaveAll(true);
                                if (result)
                                {
                                    result = etape.InternalRunAndSaveifOk();
                                }
                                if (result && etape.CodeAffectations.Length > 0 && etape.DateFin == null)
                                {
                                    CDonneeNotificationWorkflow donneeWorkflow = new CDonneeNotificationWorkflow(
                                        nIdSessionMain,
                                        etape.Id,
                                        etape.Libelle,
                                        etape.CodeAffectations,
                                        etape.TypeEtape.ExecutionAutomatique);
                                    lstNotifications.Add(donneeWorkflow);
                                    // Déclenche l'evenement spécifique au démarrage de l'étape
                                    result = etape.EnregistreEvenement(CEtapeWorkflow.c_codeEvenementOnRunStep, true);
                                }
                                if (!result)
                                {
                                    NoteErreurSurEtape(etape, result.Erreur.ToString());
                                    return;
                                }
                            }
                        }
                    }
                    catch (Exception e)
                    {
                    }
                    finally
                    {
                        sousSession.CloseSession();
                    }
                }
                if (lstNotifications != null)
                {
                    CEnvoyeurNotification.EnvoieNotifications(lstNotifications.ToArray());
                }
            }
        }
        //--------------------------------------------------------------------------------
        /// <summary>
        /// Complete les restrictions pour un objet donné
        /// </summary>
        /// <param name="restriction"></param>
        public static void CompleteRestriction(IElementARestrictionsSpecifiques element, CRestrictionUtilisateurSurType restriction)
        {
            List <CRelationElement_RestrictionSpecifique> lst = GetRelationsRestrictions(element);

            if (lst.Count == 0)
            {
                return;
            }

            CContexteDonnee  contexte = element.ContexteDonnee;
            CSessionClient   session  = CSessionClient.GetSessionForIdSession(contexte.IdSession);
            IInfoUtilisateur info     = null;
            //TESTDBKEYTODO
            CDbKey keyUtilisateur = null;

            if (session != null)
            {
                info = session.GetInfoUtilisateur();
                if (info == null)
                {
                    return;
                }
                if (info.GetDonneeDroit(CDroitDeBaseSC2I.c_droitAdministration) != null)
                {
                    return;
                }
                keyUtilisateur = info.KeyUtilisateur;
            }

            //Application des restrictions qui s'appliquent à tout le monde
            foreach (CRelationElement_RestrictionSpecifique rel in lst.ToArray())
            {
                if (rel.Applications.Count == 0)
                {
                    CListeRestrictionsUtilisateurSurType liste  = rel.GroupeRestriction.ListeRestrictions;
                    CRestrictionUtilisateurSurType       resTmp = liste.GetRestriction(element.GetType());
                    restriction.Combine(resTmp);
                    lst.Remove(rel);
                }
            }
            if (lst == null || lst.Count == 0 || info == null)
            {
                return;
            }


            CDonneesActeurUtilisateur user = new CDonneesActeurUtilisateur(contexte);

            if (user.ReadIfExists(keyUtilisateur))
            {
                CActeur acteur = user.Acteur;
                while (acteur != null)
                {
                    foreach (CRelationElement_RestrictionSpecifique rel in lst.ToArray())
                    {
                        CRelationElement_RestrictionSpecifique_Application app = rel.GetRelationFor(acteur);
                        if (app != null)
                        {
                            CListeRestrictionsUtilisateurSurType restrictions = rel.GroupeRestriction.ListeRestrictions;
                            CRestrictionUtilisateurSurType       resTmp       = restrictions.GetRestriction(element.GetType());
                            restriction.Combine(resTmp);
                            lst.Remove(rel);
                        }
                    }
                    acteur = acteur.ActeurParent;
                }
                acteur = user.Acteur;
                if (lst.Count == 0)
                {
                    return;
                }

                foreach (CGroupeActeur groupe in acteur.TousLesGroupesActeur)
                {
                    foreach (CRelationElement_RestrictionSpecifique rel in lst.ToArray())
                    {
                        if (rel.GetRelationFor(groupe) != null)
                        {
                            CListeRestrictionsUtilisateurSurType restrictions = rel.GroupeRestriction.ListeRestrictions;
                            CRestrictionUtilisateurSurType       resTmp       = restrictions.GetRestriction(element.GetType());
                            restriction.Combine(resTmp);
                            lst.Remove(rel);
                        }
                    }
                    if (lst.Count == 0)
                    {
                        return;
                    }
                }


                foreach (CRelationUtilisateur_Profil relProfil in user.RelationsProfils)
                {
                    foreach (CRelationElement_RestrictionSpecifique rel in lst.ToArray())
                    {
                        if (rel.GetRelationFor(relProfil.Profil) != null)
                        {
                            CListeRestrictionsUtilisateurSurType restrictions = rel.GroupeRestriction.ListeRestrictions;
                            CRestrictionUtilisateurSurType       resTmp       = restrictions.GetRestriction(element.GetType());
                            restriction.Combine(resTmp);
                            lst.Remove(rel);
                            if (lst.Count == 0)
                            {
                                return;
                            }
                        }
                    }
                }
            }
        }
Example #29
0
        //------------------------------------
        public CResultAErreur Importer(string strFichier, CContexteDonnee contexteDestination)
        {
            CResultAErreur result = m_parametre.LectureFichier(strFichier);

            m_nNbUpdated = 0;
            m_nNbCreated = 0;

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

            if (m_bChargerTouteLaCible)
            {
                CListeObjetsDonnees lst = new CListeObjetsDonnees(contexteDestination, m_typeCible);
                lst.AssureLectureFaite();
            }

            //Vérifie que l'utilisateur a le droit de faire un import
            CSessionClient session   = CSessionClient.GetSessionForIdSession(contexteDestination.IdSession);
            bool           bALeDroit = false;

            if (session != null)
            {
                IInfoUtilisateur info = session.GetInfoUtilisateur();
                if (info != null)
                {
                    bALeDroit = info.GetDonneeDroit(CDroitDeBaseSC2I.c_droitImport) != null;
                }
            }

            if (!bALeDroit)
            {
                result.EmpileErreur(I.T("Your are not allowed to import data|20048"));
                return(result);
            }

            DataTable table = result.Data as DataTable;

            if (table == null)
            {
                result.EmpileErreur(I.T("Import error, can not read source data|20043"));
                return(result);
            }
            int    nParametre = 1;
            string strFiltre  = "";

            foreach (CMappageChampImport mappage in Mappages)
            {
                if (mappage.IsCle)
                {
                    result = mappage.GetFiltreCle(m_typeCible, nParametre);
                    if (!result)
                    {
                        return(result);
                    }
                    nParametre++;
                    strFiltre += result.Data.ToString() + " and ";
                }
            }
            CFiltreData filtreCle = null;

            if (strFiltre.Length > 0)
            {
                filtreCle = new CFiltreData(strFiltre.Substring(0, strFiltre.Length - 5));
            }
            foreach (DataRow row in table.Rows)
            {
                result = ImporteRow(row, filtreCle, contexteDestination);
                if (!result)
                {
                    return(result);
                }
            }
            return(result);
        }
Example #30
0
        /// //////////////////////////////////////////////////
        ///Lance le calcul
        public static void DoCalc(CElementsProjetARecalculer lstElements)
        {
            CResultAErreur result  = CResultAErreur.True;
            CDbKey         keyUser = null;
            //Attend la fin des transactions en cours pour la session principale
            IDatabaseConnexion cnx = null;

            do
            {
                CSessionClient session = CSessionClient.GetSessionForIdSession(lstElements.IdSession);
                if (session != null && session.IsConnected)
                {
                    IInfoUtilisateur info = session.GetInfoUtilisateur();
                    //TESTDBKEYOK
                    if (info != null)
                    {
                        keyUser = info.KeyUtilisateur;
                    }
                    try
                    {
                        cnx = CSc2iDataServer.GetInstance().GetDatabaseConnexion(lstElements.IdSession, typeof(CProjet));
                    }
                    catch //En cas d'erreur, c'est probablement que la session a été fermée, du coup, on peut y aller !
                    {
                        cnx = null;
                    }
                    System.Threading.Thread.Sleep(50);
                }
                else
                {
                    cnx = null;
                }
            }while (cnx != null && cnx.IsInTrans());
            lock (typeof(CLockerStartEtape))//S'assure que deux étapes ne démarrent pas en même temps !
            {
                CAuthentificationSessionProcess auth = new CAuthentificationSessionProcess();

                using (CSessionClient sousSession = CSessionClient.CreateInstance())
                {
                    try
                    {
                        sousSession.OpenSession(auth, "Projet asynchronous calc ", ETypeApplicationCliente.Process);
                        if (keyUser != null)
                        {
                            sousSession.ChangeUtilisateur(keyUser);
                        }
                        using (CContexteDonnee ctx = new CContexteDonnee(sousSession.IdSession, true, true))
                        {
                            SetModeCalculProjet(ctx);
                            foreach (int nIdProjet in lstElements.IdsProjets)
                            {
                                CProjet projet = new CProjet(ctx);
                                if (projet.ReadIfExists(nIdProjet))
                                {
                                    projet.RecalculateDates(false);
                                }
                            }
                            foreach (int nIdMetaProjet in lstElements.IdsMetaProjets)
                            {
                                CMetaProjet meta = new CMetaProjet(ctx);
                                if (meta.ReadIfExists(nIdMetaProjet))
                                {
                                    meta.UpdateDateDebutPlanifieeFromChilds(false);
                                    meta.UpdateDateFinPlanifieeFromChilds(false);
                                    meta.UpdateDateDebutReelleFromChilds(false);
                                    meta.UpdateDateFinReelleFromChilds(false);
                                    meta.CalcProgress(false);
                                }
                            }

                            result = ctx.SaveAll(false);
                        }
                    }
                    catch (Exception e)
                    {
                    }
                    finally
                    {
                        sousSession.CloseSession();
                    }
                }
            }
        }