Пример #1
0
        //---------------------------------------------------------------------------
        public bool GenereItem(
            object obj,
            double fLat,
            double fLong, CMapLayer layer)
        {
            CResultAErreur result             = CResultAErreur.True;
            CContexteEvaluationExpression ctx = new CContexteEvaluationExpression(this.m_mapItemGenerator);

            if (FormuleCondition != null && !(FormuleCondition is C2iExpressionVrai))
            {
                result = FormuleCondition.Eval(ctx);
                if (!result || result.Data == null)
                {
                    return(false);
                }
                bool?bResult = CUtilBool.BoolFromString(result.Data.ToString());
                if (bResult == null || !bResult.Value)
                {
                    return(false);
                }
            }
            string strLibelle = "";

            if (FormuleToolTip != null)
            {
                result = FormuleToolTip.Eval(ctx);
                if (result && result.Data != null)
                {
                    strLibelle = result.Data.ToString();
                }
            }
            IMapItem item = null;

            if (MarkerType != EMapMarkerType.none)
            {
                item = new CMapItemSimple(layer, fLat, fLong, MarkerType);
            }
            else if (Image != null)
            {
                if (layer.Database.GetImage(m_strImageId) == null)
                {
                    layer.Database.AddImage(m_strImageId, Image);
                }
                item = new CMapItemImage(layer, fLat, fLong, m_strImageId);
            }
            else
            {
                item = new CMapItemSimple(layer, fLat, fLong, EMapMarkerType.green);
            }
            item.Tag              = obj;
            item.ToolTip          = strLibelle;
            item.PermanentToolTip = PermanentToolTip;

            if (ItemGenerator.ActionSurClick != null)
            {
                item.MouseClicked += new MapItemClickEventHandler(OnMouseClick);
            }

            return(true);
        }
Пример #2
0
        //---------------------------------------------------
        public override CResultAErreur GetErreursManualEndEtape(CEtapeWorkflow etape)
        {
            CResultAErreur result = base.GetErreursManualEndEtape(etape);

            if (result)
            {
                result = CResultAErreur.True;
                //Vérifie toutes les conditions de fin
                CContexteEvaluationExpression ctx = new CContexteEvaluationExpression(etape);
                foreach (CFormuleNommee fn in FormulesConditionFin)
                {
                    if (fn != null && fn.Formule != null)
                    {
                        CResultAErreur resTmp = fn.Formule.Eval(ctx);
                        if (!resTmp)
                        {
                            result.EmpileErreur(I.T("Error in formula '@1' for step @2|20082",
                                                    fn.Libelle, etape.LastError));
                            return(result);
                        }
                        bool bOk = resTmp.Data != null;
                        if (bOk)
                        {
                            bool?bConv = CUtilBool.BoolFromString(resTmp.Data.ToString());
                            bOk = bConv == true;
                        }
                        if (!bOk)
                        {
                            result.EmpileErreur(fn.Libelle);
                        }
                    }
                }
            }
            return(result);
        }
Пример #3
0
        //-----------------------------------------------------------------------------------------
        public override CReferenceTypeForm GetFinalRefTypeForm(CObjetDonneeAIdNumeriqueAuto objetDonnee)
        {
            CResultAErreur result = CResultAErreur.True;

            if (objetDonnee == null)
            {
                foreach (CParametreTypeForm parametre in m_listeParametres)
                {
                    if (parametre.Formule == null || parametre.Formule is C2iExpressionVrai)
                    {
                        return(parametre.ReferenceTypeForm);
                    }
                }
                return(m_defaultTypeForm);
            }
            CContexteEvaluationExpression ctxEval = new CContexteEvaluationExpression(objetDonnee);

            foreach (CParametreTypeForm parametre in m_listeParametres)
            {
                result.Data = true;
                if (parametre.Formule != null)
                {
                    result = parametre.Formule.Eval(ctxEval);
                }
                if (result && CUtilBool.BoolFromObject(result.Data))
                {
                    return(parametre.ReferenceTypeForm);
                }
            }
            if (m_defaultTypeForm != null)
            {
                return(m_defaultTypeForm);
            }
            return(null);
        }
Пример #4
0
        //--------------------------------------------------------
        public virtual bool ShouldImport(DataRow row, CContexteImportDonnee contexte)
        {
            switch (m_optionImport)
            {
            case EOptionImport.OnCreate:
                if (row.RowState != DataRowState.Added)
                {
                    return(false);
                }
                break;

            case EOptionImport.Never:
                return(false);
            }
            if (Condition != null && !(Condition is C2iExpressionVrai))
            {
                CContexteEvaluationExpression ctx = new CContexteEvaluationExpression(row);
                CResultAErreur result             = Condition.Eval(ctx);
                if (!result)
                {
                    result.EmpileErreur(I.T("Error on condition formula '@1'|20103",
                                            Condition.GetString()));
                    contexte.AddLog(new CLigneLogImport(ETypeLigneLogImport.Error,
                                                        row,
                                                        "",
                                                        contexte,
                                                        result.Erreur.ToString()));
                    return(false);
                }
                return(CUtilBool.BoolFromObject(result.Data));
            }
            return(true);
        }
Пример #5
0
        //---------------------------------------------------------------------------
        public bool GenereItem(
            object obj,
            double fLat1,
            double fLong1,
            double fLat2,
            double fLong2,
            CMapLayer layer)
        {
            CResultAErreur result             = CResultAErreur.True;
            CContexteEvaluationExpression ctx = new CContexteEvaluationExpression(this.m_mapLineGenerator);

            if (FormuleCondition != null && !(FormuleCondition is C2iExpressionVrai))
            {
                result = FormuleCondition.Eval(ctx);
                if (!result || result.Data == null)
                {
                    return(false);
                }
                bool?bResult = CUtilBool.BoolFromString(result.Data.ToString());
                if (bResult == null || !bResult.Value)
                {
                    return(false);
                }
            }
            string strLibelle = "";

            if (FormuleToolTip != null)
            {
                result = FormuleToolTip.Eval(ctx);
                if (result && result.Data != null)
                {
                    strLibelle = result.Data.ToString();
                }
            }


            CMapItemPath line = new CMapItemPath(layer);

            line.LineColor        = LineColor;
            line.LineWidth        = LineWidth;
            line.ToolTip          = strLibelle;
            line.PermanentToolTip = m_bPermanentToolTip;
            line.Tag = obj;
            List <SLatLong> lstPts = new List <SLatLong>();

            lstPts.Add(new SLatLong(fLat1, fLong1));
            //lstPts.Add(new SLatLong((fLat1 + fLat2) / 2, (fLong1 + fLong2) / 2));
            lstPts.Add(new SLatLong(fLat2, fLong2));
            line.Points = lstPts;

            if (LineGenerator.ActionSurClick != null)
            {
                line.MouseClicked += new MapItemClickEventHandler(OnMouseClick);
            }


            return(true);
        }
Пример #6
0
        //--------------------------------------------------------------------------
        private CResultAErreur StartOrRestartProjet(CEtapeWorkflow etape)
        {
            CResultAErreur result = CResultAErreur.True;
            CResultAErreurType <CProjet> resProjet = CGestionnaireProjetsDeWorkflow.AssureProjetRunnable(etape, this);

            if (!resProjet)
            {
                result.EmpileErreur(resProjet.Erreur);
                return(result);
            }
            CProjet projet = resProjet.DataType;

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

            if (etape.DateDebut == null)
            {
                etape.DateDebut = DateTime.Now;
            }

            if (projet.ProjetsFils.Count == 0)
            {
                if (projet.DateDebutReel == null || GererIteration)
                {
                    projet.DateDebutReel = etape.DateDebut.Value;
                    projet.DateFinRelle  = null;
                }
                else if (!projet.HasOptionLienEtape(EOptionLienProjetEtape.StepKeepDates))
                {
                    projet.DateDebutReel = etape.DateDebut.Value;
                    projet.DateFinRelle  = null;
                }
            }
            CContexteEvaluationExpression ctxEval = new CContexteEvaluationExpression(etape);

            foreach (CAffectationsProprietes affectation in AffectationsCreationEtDemarrage)
            {
                bool bAppliquer = affectation.FormuleCondition == null || affectation.FormuleCondition is C2iExpressionVrai;
                if (affectation.FormuleCondition != null)
                {
                    CResultAErreur res = affectation.FormuleCondition.Eval(ctxEval);
                    if (res && res.Data != null && CUtilBool.BoolFromString(res.Data.ToString()) == true)
                    {
                        bAppliquer = true;
                    }
                }
                if (bAppliquer)
                {
                    affectation.AffecteProprietes(projet, etape, new CFournisseurPropDynStd());
                }
            }
            System.Console.WriteLine("Démarrage projet " + projet.Libelle);
            return(result);
        }
Пример #7
0
        //--------------------------------------------------
        public ITestDataHotel GetTestFinal(object objetPourSousProprietes)
        {
            CResultAErreur result             = CResultAErreur.True;
            CContexteEvaluationExpression ctx = new CContexteEvaluationExpression(objetPourSousProprietes);

            if (FormuleApplication != null)
            {
                result = FormuleApplication.Eval(ctx);
                if (!result || result.Data == null)
                {
                    return(null);
                }
                if (!CUtilBool.BoolFromObject(result.Data))
                {
                    return(null);
                }
            }
            double?valRef = null;

            if (FormuleValeur != null)
            {
                result = FormuleValeur.Eval(ctx);
                if (!result)
                {
                    return(null);
                }
                if (result.Data is double)
                {
                    valRef = (double)result.Data;
                }
                else
                {
                    try
                    {
                        valRef = Convert.ToDouble(result.Data);
                    }
                    catch { }
                }
            }
            if (valRef == null)
            {
                return(null);
            }

            CTestDataHotelValue test = new CTestDataHotelValue();

            test.IdChamp         = m_strHotelColonneId;
            test.Operateur       = Operateur;
            test.ValeurReference = valRef.Value;
            return(test);
        }
Пример #8
0
        //---------------------------------------------------------------------------
        public CResultAErreur ExecuteAction(CActionSur2iLinkMenuDeroulant actionMenu, object sender, object objetCible)
        {
            CResultAErreur result = CResultAErreur.True;

            List <ToolStripItem> listeItems = new List <ToolStripItem>();

            foreach (IMenuItem item in actionMenu.ListeMenuItems)
            {
                bool bAdd = true;
                if (item.FormuleCondition != null)
                {
                    CContexteEvaluationExpression ctx = new CContexteEvaluationExpression(objetCible);
                    result = item.FormuleCondition.Eval(ctx);
                    if (result && !CUtilBool.BoolFromObject(result.Data))
                    {
                        bAdd = false;
                    }
                }
                if (bAdd)
                {
                    IExecuteurSpecifiqueActionMenuItem executeurSpecifique = null;
                    if (m_dicTypeActionExecuteur.TryGetValue(item.GetType(), out executeurSpecifique))
                    {
                        listeItems.AddRange(executeurSpecifique.GetItemsForContextMenuStrip(item, sender, objetCible));
                    }
                }
            }
            ContextMenuStrip menuDeroulant = new ContextMenuStrip();

            menuDeroulant.Items.Clear();
            menuDeroulant.Items.AddRange(listeItems.ToArray());
            if (menuDeroulant.Items.Count > 0)
            {
                /*if (sender != null)
                 *  menuDeroulant.Show((Control)sender, new Point(0, ((Control)sender).Height));
                 * else*/
                menuDeroulant.Show(Cursor.Position);
            }
            result.Data = listeItems.ToArray();
            return(result);
        }
Пример #9
0
        //--------------------------------------------------
        public ITestDataHotel GetTestFinal(object objetPourSousProprietes)
        {
            CResultAErreur result             = CResultAErreur.True;
            CContexteEvaluationExpression ctx = new CContexteEvaluationExpression(objetPourSousProprietes);

            if (FormuleApplication != null)
            {
                result = FormuleApplication.Eval(ctx);
                if (!result || result.Data == null)
                {
                    return(null);
                }
                if (!CUtilBool.BoolFromObject(result.Data))
                {
                    return(null);
                }
            }
            DateTime?dateRef = null;

            if (FormuleDate != null)
            {
                result = FormuleDate.Eval(ctx);
                if (!result)
                {
                    return(null);
                }
                if (result.Data is DateTime || result.Data is CDateTimeEx)
                {
                    dateRef = (DateTime)result.Data;
                }
            }
            if (dateRef == null)
            {
                return(null);
            }
            CTestDataHotelDate test = new CTestDataHotelDate();

            test.Operateur = Operateur;
            test.DateTest  = dateRef.Value;
            return(test);
        }
Пример #10
0
        //---------------------------------------------------
        public override CResultAErreur EndEtapeNoSave(CEtapeWorkflow etape)
        {
            HashSet <string> lstCodes         = new HashSet <string>();
            CContexteEvaluationExpression ctx = new CContexteEvaluationExpression(etape);

            foreach (CFormuleNommee formule in FormulesCodesRetour)
            {
                CResultAErreur result = formule.Formule.Eval(ctx);
                bool?          bOk    = result && result.Data != null?CUtilBool.BoolFromString(result.Data.ToString()) : null;

                if (bOk != null && bOk.Value)
                {
                    lstCodes.Add(formule.Libelle);
                }
            }
            if (lstCodes.Count == 0)
            {
                lstCodes.Add(c_codeRetourAutres);
            }
            etape.CodesRetour = lstCodes.ToArray();
            return(base.EndEtapeNoSave(etape));
        }
Пример #11
0
        //--------------------------------------------
        protected virtual bool ShouldApply(CEasyQuery query)
        {
            if (m_condition == null)
            {
                return(true);
            }
            if (m_condition is C2iExpressionVrai)
            {
                return(true);
            }
            CContexteEvaluationExpression ctx = new CContexteEvaluationExpression(query);
            CResultAErreur result             = m_condition.Eval(ctx);

            if (!result)
            {
                return(true);
            }
            if (CUtilBool.BoolFromObject(result.Data))
            {
                return(true);
            }
            return(false);
        }
Пример #12
0
        public void Init(
            CWndFor2iDataGrid wndFor2iDataGrid,
            C2iWndDataGrid wndGrid,
            object elementEdite,
            List <object> lstObjets,
            IFournisseurProprietesDynamiques fournisseur)
        {
            m_wndFor2iDataGrid     = wndFor2iDataGrid;
            m_listeObjetsOriginale = lstObjets;
            m_fournisseur          = fournisseur;
            m_wndGrid      = wndGrid;
            m_elementEdite = elementEdite;
            if (m_cache != null)
            {
                m_cache.Dispose();
            }
            m_cache = new CGridDataCache(this);


            List <object> listeObjets = new List <object>(lstObjets);

            foreach (object newElt in m_listeElementsAdd)
            {
                if (!lstObjets.Contains(newElt))
                {
                    lstObjets.Add(newElt);
                }
            }

            m_panelTop.Visible  = m_wndGrid.HasAddButton || m_wndGrid.HasDeleteButton;
            m_lnkAdd.Visible    = m_wndGrid.HasAddButton;
            m_lnkDelete.Visible = m_wndGrid.HasDeleteButton;

            m_grid.AutoGenerateColumns = false;
            Filtrer();
            m_grid.SuspendDrawing();
            //m_grid.DataSource = lstObjets;
            m_grid.Columns.Clear();
            int nMaxHeight = m_grid.ColumnHeadersHeight;

            m_grid.EnableHeadersVisualStyles            = false;
            m_grid.RowHeadersVisible                    = m_wndGrid.RowHeaderWidth != 0;
            m_grid.RowHeadersWidth                      = Math.Max(m_wndGrid.RowHeaderWidth, 10);
            m_grid.RowHeadersDefaultCellStyle.BackColor = m_wndGrid.RowHeaderColor;
            m_grid.BackgroundColor                      = m_wndGrid.BackColor;
            m_grid.DefaultCellStyle.SelectionBackColor  = m_wndGrid.SelectedCellBackColor;
            m_grid.DefaultCellStyle.SelectionForeColor  = m_wndGrid.SelectedCellForeColor;
            m_grid.EditMode = DataGridViewEditMode.EditOnEnter;
            if (m_wndGrid.DefaultRowHeight > 0)
            {
                m_grid.RowTemplate.Height = m_wndGrid.DefaultRowHeight;
            }
            int nCol = 0;

            foreach (I2iObjetGraphique obj in m_wndGrid.Childs)
            {
                C2iWndDataGridColumn          col     = obj as C2iWndDataGridColumn;
                CContexteEvaluationExpression ctxEval = new CContexteEvaluationExpression(m_elementEdite);
                //Evalue la formule de visibilité
                if (col.Visiblity != null)
                {
                    CResultAErreur res = col.Visiblity.Eval(ctxEval);
                    if (res && !CUtilBool.BoolFromObject(res.Data))
                    {
                        col = null;
                    }
                }
                if (col != null)
                {
                    IWndIncluableDansDataGrid wndForGrid = col.Control as IWndIncluableDansDataGrid;
                    m_cache.RegisterControle(nCol, wndForGrid);
                    nCol++;
                    if (wndForGrid != null)
                    {
                        DataGridViewColumn gridCol = new DataGridViewColumn(
                            new CDataGridViewCustomCellFor2iWnd(m_cache, col, nCol - 1, wndForGrid, m_fournisseur)
                            );
                        if (col.Enabled != null)
                        {
                            CResultAErreur result = col.Enabled.Eval(ctxEval);
                            if (result && !CUtilBool.BoolFromObject(result.Data))
                            {
                                gridCol.ReadOnly = true;
                            }
                        }
                        gridCol.HeaderText = col.Text;
                        gridCol.Width      = col.ColumnWidth;
                        DataGridViewCellStyle style = new DataGridViewCellStyle();
                        style.BackColor          = col.BackColor;
                        style.ForeColor          = col.ForeColor;
                        style.Font               = col.Font;
                        gridCol.HeaderCell.Style = style;

                        if (col.Control != null)
                        {
                            DataGridViewCellStyle styleCell = new DataGridViewCellStyle();
                            styleCell.Font             = col.Control.Font;
                            styleCell.BackColor        = col.Control.BackColor;
                            styleCell.ForeColor        = col.Control.ForeColor;
                            styleCell.WrapMode         = DataGridViewTriState.True;
                            gridCol.CellTemplate.Style = styleCell;
                        }
                        m_grid.Columns.Add(gridCol);
                        nMaxHeight = Math.Max(col.Size.Height, nMaxHeight);
                    }
                }
            }
            m_grid.ResumeDrawing();
            m_grid.ColumnHeadersHeight = nMaxHeight;
            InitRestrictions(m_listeRestrictions);
        }
Пример #13
0
        /// ////////////////////////////////////////////////////////
        protected override CResultAErreur MyExecute(CContexteExecutionAction contexte)
        {
            CResultAErreur result = CResultAErreur.True;

            CContexteEvaluationExpression ctxEval = new CContexteEvaluationExpression(Process);

            object elementCible = null;

            if (FormuleElementCible != null)
            {
                result = FormuleElementCible.Eval(ctxEval);
                if (result)
                {
                    elementCible = result.Data;
                }
            }
            if (elementCible == null)
            {
                result.EmpileErreur(I.T("Error in target element formula|20236"));
                return(result);
            }
            else if (elementCible is CObjetDonnee)
            {
                elementCible = ((CObjetDonnee)elementCible).GetObjetInContexte(contexte.ContexteDonnee);
            }

            CLigneTableParametrable ligne = null;

            if (FormuleRow != null)
            {
                result = FormuleRow.Eval(ctxEval);
                if (result)
                {
                    ligne = result.Data as CLigneTableParametrable;
                }
            }
            if (ligne == null)
            {
                result.EmpileErreur(I.T("Error in table row formula|20238"));
                return(result);
            }

            //Identifie les colonnes à importer
            Dictionary <string, CDefinitionProprieteDynamique> dicMap = new Dictionary <string, CDefinitionProprieteDynamique>();

            foreach (CMappageColonne mappage in Mappages)
            {
                if (mappage.ProprieteCible != null)
                {
                    bool bPrendre = true;
                    CColonneTableParametrable col = new CColonneTableParametrable(contexte.ContexteDonnee);
                    if (col.ReadIfExists(mappage.IdColonne))
                    {
                        if (mappage.FormuleCondition != null)
                        {
                            result = mappage.FormuleCondition.Eval(ctxEval);
                            if (!result || result.Data == null)
                            {
                                bPrendre = false;
                            }
                            else
                            {
                                bool?bTmp = CUtilBool.BoolFromString(result.Data.ToString());
                                if (bTmp != null)
                                {
                                    bPrendre = bTmp.Value;
                                }
                                else
                                {
                                    bPrendre = false;
                                }
                            }
                        }
                        if (bPrendre)
                        {
                            object val = ligne.GetValue(col.Libelle);
                            if (val != null || !m_bIgnorerLesValeursVides)
                            {
                                try
                                {
                                    CInterpreteurProprieteDynamique.SetValue(elementCible, mappage.ProprieteCible, ligne.GetValue(col.Libelle));
                                }
                                catch
                                {
                                }
                            }
                        }
                    }
                }
            }
            return(result);
        }
Пример #14
0
        //---------------------------------------------------
        //S'assure que le projet est bien créé
        internal CResultAErreurType <CProjet> GetOrCreateProjetInCurrentContexte(CEtapeWorkflow etape, CProjet projetParent, IEnumerable <CProjet> predecesseurs)
        {
            CResultAErreurType <CProjet> resProjet = new CResultAErreurType <CProjet>();
            CWorkflow workflow = GetOrCreateWorkflowInCurrentContexte(etape);

            if (workflow == null)
            {
                resProjet.EmpileErreur(I.T("Can not create workflow for step @1|20143", etape.Libelle));
                return(resProjet);
            }
            if (m_nIdChampProjet == null)
            {
                resProjet.EmpileErreur(I.T("Workflow step @1 doesn't define a field to store associated project|20142", etape.Libelle));
                return(resProjet);
            }
            CProjet projet = workflow.GetValeurChamp(m_nIdChampProjet.Value) as CProjet;

            //SC 8/5/2013 : s'assure que le projet a le bon parent !
            if (projetParent != null && projet != null &&
                projetParent != projet.Projet)
            {
                projet = null;
            }
            string strGanttId = GetGanttId(etape);

            if (projet == null)
            {
                //Création du projet
                projet = new CProjet(etape.ContexteDonnee);
                CTypeProjet typeProjet = null;
                if (m_dbKeyTypeProjet != null) //s'il est null, pas d'erreur ça peut être les formules d'initialisation qui le remplissent
                {
                    typeProjet = new CTypeProjet(etape.ContexteDonnee);
                    if (!typeProjet.ReadIfExists(m_dbKeyTypeProjet))
                    {
                        resProjet.EmpileErreur(I.T("Project type @1 for step @2 doesn't exists|20144", m_dbKeyTypeProjet.StringValue, etape.Libelle));
                        return(resProjet);
                    }
                }
                projet.CreateNewInCurrentContexte();
                projet.TypeProjet = typeProjet;
                projet.GanttId    = strGanttId;
                DateTime?dateDebut = null;
                foreach (CProjet pred in predecesseurs)
                {
                    if (dateDebut == null || pred.DateFinGantt > dateDebut.Value)
                    {
                        dateDebut = pred.DateFinGantt;
                    }
                }
                if (dateDebut == null)
                {
                    dateDebut = DateTime.Now;
                }
                projet.DateDebutPlanifiee = dateDebut;
                if (typeProjet != null)
                {
                    projet.DateFinPlanifiee = projet.DateDebutPlanifiee.Value.AddHours(typeProjet.DureeDefautHeures);
                }
                projet.Projet  = projetParent;
                projet.Libelle = etape.Libelle;
                CContexteEvaluationExpression ctxEval = new CContexteEvaluationExpression(etape);
                foreach (CAffectationsProprietes affectation in AffectationsCreationEtDemarrage)
                {
                    bool bAppliquer = affectation.FormuleCondition == null || affectation.FormuleCondition is C2iExpressionVrai;
                    if (affectation.FormuleCondition != null)
                    {
                        CResultAErreur res = affectation.FormuleCondition.Eval(ctxEval);
                        if (res && res.Data != null && CUtilBool.BoolFromString(res.Data.ToString()) == true)
                        {
                            bAppliquer = true;
                        }
                    }
                    if (bAppliquer)
                    {
                        affectation.AffecteProprietes(projet, etape, new CFournisseurPropDynStd());
                    }
                }
                foreach (CProjet predecesseur in predecesseurs)
                {
                    projet.AddPredecessor(predecesseur);
                }
                CResultAErreur result = workflow.SetValeurChamp(m_nIdChampProjet.Value, projet);
                if (!result)
                {
                    resProjet.EmpileErreur(result.MessageErreur);
                    return(resProjet);
                }
            }
            resProjet.DataType = projet;
            return(resProjet);
        }
        //--------------------------------------------------------------------------
        /// <summary>
        /// Retourne un projet pouvant être executé pour l'étape demandée<BR>
        /// </BR>
        /// Cette fonction se charge de la mise à jour de toutes la structure du projet
        /// </summary>
        /// <param name="etape"></param>
        /// <returns></returns>
        public static CResultAErreurType <CProjet> AssureProjetRunnable(CEtapeWorkflow etape, CBlocWorkflowProjet blocProjet)
        {
            CResultAErreurType <CProjet> resProjet = new CResultAErreurType <CProjet>();
            CProjet projet = GetProjetDirectementAssocie(etape);

            int nNumLastIteration = 0;

            if (projet != null)
            {
                nNumLastIteration = projet.NumeroIteration;
                if (projet.GanttId == "")
                {
                    projet.GanttId = blocProjet.GetGanttId(etape);
                }
            }

            CProjet projetParent = FindProjetParent(etape);

            if (projetParent != null && projet != null &&
                projetParent != projet.Projet)
            {
                projet = null;
            }

            if (projet == null)
            {
                resProjet = blocProjet.GetOrCreateProjetInCurrentContexte(etape,
                                                                          FindProjetParent(etape),
                                                                          FindPredecesseurs(etape));
                return(resProjet);
            }

            if (
                projet.DateFinRelle == null ||
                !blocProjet.GererIteration ||
                projet.HasOptionLienEtape(EOptionLienProjetEtape.NoIteration))
            {
                if ((!blocProjet.GererIteration || projet.HasOptionLienEtape(EOptionLienProjetEtape.NoIteration)) &&
                    !projet.HasOptionLienEtape(EOptionLienProjetEtape.StepKeepDates))
                {
                    projet.DateFinRelle = null;
                }
                resProjet.DataType = projet;
                return(resProjet);
            }

            //Il faut créer une ittération pour ce projet
            IEnumerable <CProjet> predecesseurs = FindPredecesseurs(etape);

            CProjet newProjet = projet.Clone(false) as CProjet;

            //Remet les dates à null
            newProjet.DateDebutReel = null;
            newProjet.DateFinRelle  = null;

            //Met les deux projets sur la même barre de gantt
            if (projet.GanttId.Length == 0)
            {
                projet.GanttId = blocProjet.GetGanttId(etape);
            }
            newProjet.GanttId = projet.GanttId;

            DateTime?dateDebut = null;

            foreach (CProjet pred in predecesseurs)
            {
                if (dateDebut == null || pred.DateFinGantt > dateDebut.Value)
                {
                    dateDebut = pred.DateFinGantt;
                }
            }
            if (dateDebut == null)
            {
                dateDebut = DateTime.Now;
            }
            if (dateDebut != null)
            {
                newProjet.DateDebutPlanifiee = dateDebut.Value;
                newProjet.DateFinPlanifiee   = dateDebut.Value.AddHours(projet.DureeEnHeure.Value);
            }
            newProjet.DateDebutAuto   = true;
            newProjet.NumeroIteration = nNumLastIteration + 1;

            //Supprime toutes les dépendances du nouveau projet
            CObjetDonneeAIdNumerique.Delete(newProjet.LiensDeProjetAttaches, true);

            //Change le workflow lancé
            etape.WorkflowLancé.SetValeurChamp(blocProjet.IdChampProjet.Value, newProjet);

            //Crée les liens vers les prédécesseurs
            foreach (CProjet pred in predecesseurs)
            {
                newProjet.AddPredecessor(pred);
            }

            //Met à jour les successeurs
            foreach (CTypeEtapeWorkflow typeSucc in FindTypesSuccesseurs(etape.TypeEtape))
            {
                CEtapeWorkflow succ = etape.Workflow.GetEtapeForType(typeSucc);
                if (succ != null)
                {
                    resProjet = AssureProjetRunnable(succ, succ.TypeEtape.Bloc as CBlocWorkflowProjet);
                    CProjet prjSucc = resProjet.DataType;
                    if (prjSucc != null)
                    {
                        //Si le projet est lié à l'ancien, on déplace le lien
                        CLienDeProjet lien = prjSucc.GetLienToPredecesseur(projet);
                        if (lien != null)
                        {
                            lien.ProjetA = newProjet;
                        }
                    }
                }
            }
            newProjet.AutoMoveDependancies();

            CContexteEvaluationExpression ctxEval = new CContexteEvaluationExpression(etape);

            foreach (CAffectationsProprietes affectation in blocProjet.AffectationsCreationEtDemarrage)
            {
                bool bAppliquer = affectation.FormuleCondition == null || affectation.FormuleCondition is C2iExpressionVrai;
                if (affectation.FormuleCondition != null)
                {
                    CResultAErreur res = affectation.FormuleCondition.Eval(ctxEval);
                    if (res && res.Data != null && CUtilBool.BoolFromString(res.Data.ToString()) == true)
                    {
                        bAppliquer = true;
                    }
                }
                if (bAppliquer)
                {
                    affectation.AffecteProprietes(newProjet, etape, new CFournisseurPropDynStd());
                }
            }

            resProjet.DataType = newProjet;
            return(resProjet);
        }
Пример #16
0
        //-------------------------------------------------------------------
        /// <summary>
        /// Démarre les étapes suivantes d'une étape
        /// </summary>
        /// <param name="etape"></param>
        /// <returns></returns>
        public CResultAErreur PrépareSuiteEtapeInCurrentContext(CEtapeWorkflow etape)
        {
            CResultAErreur     result    = CResultAErreur.True;
            CTypeEtapeWorkflow typeEtape = etape.TypeEtape;

            if (typeEtape.LiensSortants.Count == 0)
            {
                IsRunning = false;
                if (EtapeAppelante != null)
                {
                    //Fin de l'étape appelante
                    result = EtapeAppelante.EndEtapeNoSave();
                    if (!result)
                    {
                        return(result);
                    }
                }
                return(result);
            }
            foreach (CLienEtapesWorkflow lien in typeEtape.LiensSortants)
            {
                bool          bStartLien  = true;
                C2iExpression formuleLien = lien.Formule;
                if (lien.ActivationCode.Trim().Length > 0)
                {
                    bStartLien = false;
                    foreach (string strCodeRetour in etape.CodesRetour)
                    {
                        if (strCodeRetour.ToUpper() == lien.ActivationCode.ToUpper())
                        {
                            bStartLien = true;
                            break;
                        }
                    }
                }
                if (formuleLien != null && bStartLien && !(formuleLien is C2iExpressionVrai))
                {
                    CContexteEvaluationExpression ctx = new CContexteEvaluationExpression(etape);
                    result = formuleLien.Eval(ctx);
                    if (!result)
                    {
                        result.EmpileErreur(I.T("Error on condition formula on link @1 from step @2|20008",
                                                lien.Libelle, etape.Libelle));
                        return(result);
                    }
                    bStartLien = result.Data != null && CUtilBool.BoolFromString(result.Data.ToString()) == true;
                }
                if (bStartLien)
                {
                    CTypeEtapeWorkflow typeDestination           = lien.EtapeDestination;
                    CResultAErreurType <CEtapeWorkflow> resEtape = etape.Workflow.CreateOrGetEtapeInCurrentContexte(typeDestination);
                    if (!resEtape)
                    {
                        result.EmpileErreur(resEtape.Erreur);
                        return(result);
                    }
                    else
                    {
                        resEtape.DataType.DemandeDemarrageInCurrentContext(etape);
                    }
                }
            }
            return(result);
        }