Example #1
0
        /// <summary>
        /// Check if the "Fremd-ID"-field is ""
        /// Then it checks if the ID is in the description
        /// if there is no ID, then it checks in the comment section
        /// </summary>
        /// <param name="args">Properties of the task</param>
        /// <returns>args.Issue</returns>
        public IssueDto BeforeUpdateFull(IssueDtoEventArgs args)
        {
            try
            {
                List <IssueCommentDto> comments = args.Issue.Comments;
                string             description  = args.Issue.Description;
                string             fieldName    = GetAppConfigValue("customFieldName");
                CustomFieldDataDto fremdIDField = args.Issue.CustomFields.Find(field => field.Name.Equals(fieldName));

                if (fremdIDField.Entity.Data == "")
                {
                    if (FindID(description) != "")
                    {
                        string beforeValue        = fremdIDField.Entity.Data;
                        string valueIdDescription = FindID(description);
                        string fieldValue         = fremdIDField.Entity.Data = valueIdDescription;
                        CreateAuditlog(args.Context, args.Issue.Entity.Id, args.Issue.Entity.ProjectId, fremdIDField, beforeValue, fieldValue);
                    }
                    else
                    {
                        foreach (IssueCommentDto comment in comments)
                        {
                            string valueIdComment = FindID(comment.Entity.Comment);
                            if (valueIdComment != "")
                            {
                                string       fieldValue   = fremdIDField.Entity.Data = valueIdComment;
                                IssueManager issueManager = new IssueManager(GeminiApp.Cache(), GeminiApp.UserContext(), args.Context);
                                issueManager.Update(args.Issue);
                                CreateAuditlog(args.Context, args.Issue.Entity.Id, args.Issue.Entity.ProjectId, fremdIDField, "", fieldValue);
                                break;
                            }
                        }
                    }
                }
            }

            catch (Exception e)
            {
                int    issueID = args.Issue.Id;
                string message = string.Format("IssueID: {0}", issueID);
                GeminiApp.LogException(e, false, message);
            }
            return(args.Issue);
        }
Example #2
0
        /// <summary>
        /// Fonction permettant la création de nouveaux project à l'aide de l'API Gemini
        /// </summary>
        public void CreateProjetData(ParamCreationProjetDTO pParam)
        {
            //jc - Déclaration des variables
            //ServiceManager lService = LanceAuthentification(pParam.User);
            ServiceManager     lServiceData     = LanceAuthentification(CopyUserAsAPI(pParam.User));
            CustomFieldDataDto lCustomFieldData = new CustomFieldDataDto();

            //jc- affectation des variables a la cause
            lCustomFieldData.Entity.Data      = pParam.Projet.CodeProjet.ToString();
            lCustomFieldData.Entity.UserId    = Convert.ToInt32(pParam.User.IdGemini);
            lCustomFieldData.Entity.ProjectId = pParam.Ticket.Projet.IdProjet;
            lCustomFieldData.Entity.IssueId   = pParam.Ticket.IdTicket;
            //jc- affectation des constantes à la nouvelle cause
            lCustomFieldData.Entity.CustomFieldId = 45;
            lCustomFieldData.Entity.Created       = System.DateTime.Now;
            lCustomFieldData.Entity.Revised       = System.DateTime.Now;

            //jc- on enregistre la nouvelle cause
            lServiceData.Item.CustomFieldDataCreate(lCustomFieldData.Entity);
        }
Example #3
0
        /// <summary>
        /// Fonction permettant la création de nouveaux clarte à l'aide de l'API Gemini
        /// </summary>
        /// <param name="pParam">Critère de clarte</param>
        /// <remarks>JClaud 2015-07-20 Création</remarks>
        public void CreateClarteData(ParamCreationClarteDTO pParam)
        {
            //jc - Déclaration des variables
            //ServiceManager lService = LanceAuthentification(pParam.User);
            ServiceManager     lServiceData     = LanceAuthentification(CopyUserAsAPI(pParam.User));
            CustomFieldDataDto lCustomFieldData = new CustomFieldDataDto();

            //jc- affectation des variables de la clartée si != de 0
            if (pParam.Clarte != null)
            {
                lCustomFieldData.Entity.NumericData = Convert.ToDouble(pParam.Clarte);
            }
            lCustomFieldData.Entity.UserId    = Convert.ToInt32(pParam.User.IdGemini);
            lCustomFieldData.Entity.ProjectId = pParam.Ticket.Projet.IdProjet;
            lCustomFieldData.Entity.IssueId   = pParam.Ticket.IdTicket;
            //jc- affectation des constantes à la nouvelle cause
            lCustomFieldData.Entity.CustomFieldId = 98;
            lCustomFieldData.Entity.Created       = System.DateTime.Now;
            lCustomFieldData.Entity.Revised       = System.DateTime.Now;

            //jc- on enregistre la nouvelle cause
            lServiceData.Item.CustomFieldDataCreate(lCustomFieldData.Entity);
        }
Example #4
0
        /// <summary>
        /// This creates an auditlog (history) for the watcher and custom field manipulations
        /// </summary>
        /// <param name="context"></param>
        /// <param name="issueId"></param>
        /// <param name="issueProjectId"></param>
        /// <param name="customField"></param>
        /// <param name="beforeValue"></param>
        /// <param name="afterValue"></param>
        /// <param name="userId"></param>
        /// <param name="username"></param>
        public void CreateAuditlog(GeminiContext context, int issueId, int issueProjectId, CustomFieldDataDto customField, string beforeValue, string afterValue, int userId, string username)
        {
            try
            {
                IssueAuditManager issueAuditManager = new IssueAuditManager(GeminiApp.Cache(), GeminiApp.UserContext(), context);
                UserManager       userManager       = new UserManager(GeminiApp.Cache(), GeminiApp.UserContext(), context);
                IssueAudit        audit             = issueAuditManager.GetIssueAuditObject(issueId, issueProjectId);
                audit.UserId   = userId;
                audit.Fullname = username;

                if (customField == null)
                {
                    issueAuditManager.LogChange(audit, ItemAttributeVisibility.AssociatedWatchers,
                                                string.Empty, string.Empty, beforeValue, afterValue);
                }
                else
                {
                    issueAuditManager.LogChange(audit, ItemAttributeVisibility.AssociatedCustomFields, customField.Entity.CustomFieldId.ToString(),
                                                string.Empty, string.Empty, beforeValue, afterValue);
                }
            }
            catch (Exception exception)
            {
                GeminiApp.LogException(exception, false, exception.Message);
            }
        }
Example #5
0
        /// <summary>
        /// This creates an auditlog for the custom field manipulations
        /// </summary>
        /// <param name="context"></param>
        /// <param name="issueId"></param>
        /// <param name="issueProjectId"></param>
        /// <param name="customField"></param>
        /// <param name="beforeValue"></param>
        /// <param name="afterValue"></param>
        public void CreateAuditlog(GeminiContext context, int issueId, int issueProjectId, CustomFieldDataDto customField, string beforeValue, string afterValue)
        {
            IssueAuditManager issueAuditManager = new IssueAuditManager(GeminiApp.Cache(), GeminiApp.UserContext(), context);
            IssueAudit        audit             = issueAuditManager.GetIssueAuditObject(issueId, issueProjectId);

            issueAuditManager.LogChange(audit, ItemAttributeVisibility.AssociatedCustomFields, customField.Entity.CustomFieldId.ToString(),
                                        string.Empty, string.Empty, beforeValue, afterValue);
        }
Example #6
0
        /// <summary>
        /// Fonction permettant de créer un nouveau en fonction des paramètres
        /// </summary>
        /// <param name="pCriete">Critère de sélection</param>
        /// <returns>Ticket correspondant</returns>
        /// <remarks>Guillaume Bécard - 2015-02-20 - Création</remarks>
        public int CreateTicket(ParamCreationTicketDTO pCritere)
        {
            //jc - Déclaration des variables
            ServiceManager       lService      = LanceAuthentification(pCritere.User);
            ServiceManager       lServiceData  = LanceAuthentification(CopyUserAsAPI(pCritere.User));
            IssueDto             lNewTicket    = new IssueDto();
            IssueTimeTrackingDto lTimeTracking = new IssueTimeTrackingDto();

            #region TICKET

            //jc- on affecte les variables au nouveau ticket
            lNewTicket.Entity.ProjectId = pCritere.Ticket.Projet.IdProjet;
            //jc- si un déclarant est indiqué dans le ticket
            if (pCritere.Ticket.Declarant != null)
            {
                //jc- création du ticket par cette personne
                lNewTicket.Entity.ReportedBy = Convert.ToInt32(pCritere.Ticket.Declarant.IdGemini);
            }
            else
            {
                //jc- sinon création du ticket par la personne en cours
                lNewTicket.Entity.ReportedBy = Convert.ToInt32(pCritere.User.IdGemini);
            }

            //jc- si le type de ticket n'est pas déjà affecter alors on lui affecte une valeur par défault
            lNewTicket.Entity.TypeId = (pCritere.Ticket.Type == null) ? 80 : pCritere.Ticket.Type.IdType;

            //jc- si une ressource est indiquée dans le ticket
            if (pCritere.Ticket.Ressource != null)
            {
                //jc- on affecte cette personne en ressource du ticket
                lNewTicket.Entity.Resources = "|" + Convert.ToInt32(pCritere.Ticket.Ressource.IdGemini) + "|";
            }

            lNewTicket.Entity.Title            = pCritere.Ticket.NomTicket;
            lNewTicket.Entity.Description      = pCritere.Ticket.DescriptionTicket;
            lNewTicket.Entity.StatusId         = pCritere.Ticket.Statut.IdStatut;
            lNewTicket.Entity.ResolutionId     = (pCritere.Ticket.Resolution == null) ? 0 : pCritere.Ticket.Resolution.IdResolution;
            lNewTicket.Entity.PercentComplete  = Convert.ToInt32(pCritere.Ticket.Avancement);
            lNewTicket.Entity.EstimatedHours   = pCritere.Ticket.Temps.EstimateHours;
            lNewTicket.Entity.EstimatedMinutes = pCritere.Ticket.Temps.EstimateMinutes;
            lNewTicket.Entity.StartDate        = System.DateTime.Now.Date;
            lNewTicket.Entity.DueDate          = System.DateTime.Now;
            lNewTicket.Entity.Created          = System.DateTime.Now;
            lNewTicket.Entity.Revised          = System.DateTime.Now;
            lNewTicket.Entity.ResolvedDate     = System.DateTime.Now;
            lNewTicket.Entity.ClosedDate       = System.DateTime.Now;
            lNewTicket.Entity.Creator          = Convert.ToInt32(pCritere.User.IdGemini);

            //jc- gestion des versions si celles-ci sont renseignées
            if (pCritere.Ticket.VersionAffectee != 0)
            {
                lNewTicket.Entity.AffectedVersions = "|" + pCritere.Ticket.VersionAffectee.ToString() + "|";
            }
            if (pCritere.Ticket.RegleDansLaVersion != 0)
            {
                lNewTicket.Entity.FixedInVersionId = pCritere.Ticket.RegleDansLaVersion;
            }

            //jc- gestion du composant s'il est renseigné
            if (pCritere.Ticket.Composant != null)
            {
                lNewTicket.Entity.Components = "|" + pCritere.Ticket.Composant.IdComposant.ToString() + "|";
            }

            //jc- affectation des variables constantes pour le nouveau ticket
            lNewTicket.Entity.PriorityId = 43;
            lNewTicket.Entity.Visibility = 1;
            lNewTicket.Entity.IsParent   = false;
            lNewTicket.Entity.Points     = 0;

            //jc- enregistrement du nouveau ticket en base
            lNewTicket = lServiceData.Item.Create(lNewTicket.Entity);

            #endregion

            #region TIME TRACKING

            //jc- si le temps à loggé est différent de 00h00min
            if (!(pCritere.Ticket.Temps.LoggedHours == 0 && pCritere.Ticket.Temps.LoggedMinutes == 0))
            {
                //jc- affectation des variables du Time Tracking
                lTimeTracking.Entity.ProjectId = lNewTicket.Entity.ProjectId;
                lTimeTracking.Entity.IssueId   = lNewTicket.Entity.Id;
                lTimeTracking.Entity.UserId    = Convert.ToInt32(pCritere.User.IdGemini);
                lTimeTracking.Entity.Comment   = pCritere.Ticket.DescriptionTimeTracking;
                lTimeTracking.Entity.Hours     = pCritere.Ticket.Temps.LoggedHours;
                lTimeTracking.Entity.Minutes   = pCritere.Ticket.Temps.LoggedMinutes;
                lTimeTracking.Entity.Created   = pCritere.Ticket.Temps.DateDebut;
                lTimeTracking.Entity.EntryDate = pCritere.Ticket.Temps.DateDebut;
                //tbh - Si le type de temps est renseigné, l'assigné, sinon type de temps par défault (facturable client)
                lTimeTracking.Entity.TimeTypeId = (pCritere.Ticket.TypeTemp != null) ? (int)pCritere.Ticket.TypeTemp.IdTimeType : 52;

                //jc- on enregistre le nouveau Time Tracking
                lTimeTracking = lService.Item.LogTime(lTimeTracking.Entity);
            }

            #endregion

            #region CLIENT

            //jc- si le client est renseigné
            if (pCritere.Ticket.Client != null)
            {
                CustomFieldDataDto lCustomFieldData = new CustomFieldDataDto();

                //jc- affectation des variables a la cause
                lCustomFieldData.Entity.Data      = pCritere.Ticket.Client.Identifiant.ToString();
                lCustomFieldData.Entity.UserId    = Convert.ToInt32(pCritere.User.IdGemini);
                lCustomFieldData.Entity.ProjectId = lNewTicket.Entity.ProjectId;
                lCustomFieldData.Entity.IssueId   = lNewTicket.Entity.Id;
                //jc- affectation des constantes au nouveau client
                lCustomFieldData.Entity.CustomFieldId = (lNewTicket.Entity.ProjectId == 95) ? 100 : 99;
                lCustomFieldData.Entity.Created       = System.DateTime.Now;
                lCustomFieldData.Entity.Revised       = System.DateTime.Now;

                //jc- on enregistre la nouvelle cause
                lServiceData.Item.CustomFieldDataCreate(lCustomFieldData.Entity);
            }

            #endregion

            #region COMMENT

            //jc- si la description pour un commentaire est renseigné et le projet n'est pas Support ACA (101) ou Support Client (107)
            if (pCritere.Ticket.DescriptionCommentTicket != "" && pCritere.OldTicket.Projet.IdProjet != 101 &&
                pCritere.OldTicket.Projet.IdProjet != 107)
            {
                //jc - Déclaration des variables
                IssueCommentDto lCommentaire = new IssueCommentDto();

                //jc- on affecte les différentes valeurs au nouveau commentaire
                lCommentaire.Entity.Comment   = pCritere.Ticket.DescriptionCommentTicket;
                lCommentaire.Entity.ProjectId = pCritere.OldTicket.Projet.IdProjet;
                lCommentaire.Entity.IssueId   = (pCritere.OldTicket.IdTicket == 0) ? lNewTicket.Id : pCritere.OldTicket.IdTicket;
                lCommentaire.Entity.UserId    = Convert.ToInt32(pCritere.User.IdGemini);
                lCommentaire.Entity.Created   = System.DateTime.Now;
                lCommentaire.Entity.Fullname  = pCritere.User.Login;
                //jc- affectation de constantes
                lCommentaire.Entity.IsClosing  = false;
                lCommentaire.Entity.Visibility = 1;

                //jc- intégration du nouveau commentaire via l'API
                lServiceData.Item.IssueCommentCreate(lCommentaire.Entity);
            }

            #endregion

            #region PROJET

            if (pCritere.OldTicket.Projet != null)
            {
                //jc - Déclaration des variables
                CustomFieldDataDto lCustomFieldDataProjet = new CustomFieldDataDto();

                //jc- affectation des variables a la cause
                lCustomFieldDataProjet.Entity.Data      = pCritere.OldTicket.Projet.IdProjet.ToString();
                lCustomFieldDataProjet.Entity.UserId    = Convert.ToInt32(pCritere.User.IdGemini);
                lCustomFieldDataProjet.Entity.ProjectId = lNewTicket.Entity.ProjectId;
                lCustomFieldDataProjet.Entity.IssueId   = lNewTicket.Entity.Id;
                //jc- affectation des constantes à la nouvelle cause
                lCustomFieldDataProjet.Entity.CustomFieldId = 102;
                lCustomFieldDataProjet.Entity.Created       = System.DateTime.Now;
                lCustomFieldDataProjet.Entity.Revised       = System.DateTime.Now;

                //jc- on enregistre la nouvelle cause
                lServiceData.Item.CustomFieldDataCreate(lCustomFieldDataProjet.Entity);
            }

            #endregion

            #region RAISON

            if (pCritere.Ticket.Raison != null)
            {
                //jc - Déclaration des variables
                CustomFieldDataDto lCustomFieldDataRaison = new CustomFieldDataDto();

                //jc- affectation des variables a la cause
                lCustomFieldDataRaison.Entity.Data      = pCritere.Ticket.Raison.IdRaison.ToString();
                lCustomFieldDataRaison.Entity.UserId    = Convert.ToInt32(pCritere.User.IdGemini);
                lCustomFieldDataRaison.Entity.ProjectId = lNewTicket.Entity.ProjectId;
                lCustomFieldDataRaison.Entity.IssueId   = lNewTicket.Entity.Id;
                //jc- affectation des constantes à la nouvelle raison
                lCustomFieldDataRaison.Entity.CustomFieldId = 103;
                lCustomFieldDataRaison.Entity.Created       = System.DateTime.Now;
                lCustomFieldDataRaison.Entity.Revised       = System.DateTime.Now;

                //jc- on enregistre la nouvelle cause
                lServiceData.Item.CustomFieldDataCreate(lCustomFieldDataRaison.Entity);
            }

            #endregion

            #region PROJET CONCERNE

            //tbh- si le projet concerne n'est pas null alors on en créé un
            if (pCritere.Ticket.ProjetConcerne != null)
            {
                //tbh - Déclaration des variables
                CustomFieldDataDto lCustomFieldProject = new CustomFieldDataDto();

                //tbh- affectation des variables a la cause
                lCustomFieldProject.Entity.Data      = pCritere.Ticket.ProjetConcerne.CodeProjet.ToString();
                lCustomFieldProject.Entity.UserId    = Convert.ToInt32(pCritere.User.IdGemini);
                lCustomFieldProject.Entity.ProjectId = lNewTicket.Entity.ProjectId;
                lCustomFieldProject.Entity.IssueId   = lNewTicket.Entity.Id;

                //tbh- affectation des constantes à la nouvelle raison
                lCustomFieldProject.Entity.CustomFieldId = 118;
                lCustomFieldProject.Entity.Created       = System.DateTime.Now;
                lCustomFieldProject.Entity.Revised       = System.DateTime.Now;

                //tbh- on enregistre la nouvelle cause
                lServiceData.Item.CustomFieldDataCreate(lCustomFieldProject.Entity);
            }
            #endregion

            #region CODE AFFAIRE

            //tbh- si le code affaire n'est pas null alors on en créé un
            if (pCritere.Ticket.CodeAffaire != null)
            {
                //tbh - Déclaration des variables
                CustomFieldDataDto lCustomFieldCodeAff = new CustomFieldDataDto();

                //tbh- affectation des variables au code affaire
                lCustomFieldCodeAff.Entity.Data      = pCritere.Ticket.CodeAffaire.Code.ToString();
                lCustomFieldCodeAff.Entity.UserId    = Convert.ToInt32(pCritere.User.IdGemini);
                lCustomFieldCodeAff.Entity.ProjectId = lNewTicket.Entity.ProjectId;
                lCustomFieldCodeAff.Entity.IssueId   = lNewTicket.Entity.Id;

                //tbh- affectation des constantes à la nouvelle raison
                if (pCritere.Ticket.Projet != null)
                {
                    switch (pCritere.Ticket.Projet.TemplateId)
                    {
                    case 18:
                        lCustomFieldCodeAff.Entity.CustomFieldId = 39;
                        break;

                    case 26:
                        lCustomFieldCodeAff.Entity.CustomFieldId = 112;
                        break;

                    case 17:
                        lCustomFieldCodeAff.Entity.CustomFieldId = 123;
                        break;

                    case 21:
                        lCustomFieldCodeAff.Entity.CustomFieldId = 126;
                        break;

                    case 23:
                        lCustomFieldCodeAff.Entity.CustomFieldId = 125;
                        break;

                    case 22:
                        lCustomFieldCodeAff.Entity.CustomFieldId = 124;
                        break;

                    default:
                        lCustomFieldCodeAff.Entity.CustomFieldId = 112;
                        break;
                    }
                }
                else
                {
                    lCustomFieldCodeAff.Entity.CustomFieldId = 112;
                }

                lCustomFieldCodeAff.Entity.Created = System.DateTime.Now;
                lCustomFieldCodeAff.Entity.Revised = System.DateTime.Now;

                //tbh- on enregistre la nouvelle cause
                lServiceData.Item.CustomFieldDataCreate(lCustomFieldCodeAff.Entity);
            }

            #endregion

            #region CODE CONTRAT

            //jc- si le code contrat n'est pas null alors on en créait un
            if (pCritere.Ticket.CodeContrat != null)
            {
                //jc - Déclaration des variables
                CustomFieldDataDto lCustomFieldContrat = new CustomFieldDataDto();

                //jc- affectation des variables a la cause
                lCustomFieldContrat.Entity.Data      = pCritere.Ticket.CodeContrat.Code.ToString();
                lCustomFieldContrat.Entity.UserId    = Convert.ToInt32(pCritere.User.IdGemini);
                lCustomFieldContrat.Entity.ProjectId = lNewTicket.Entity.ProjectId;
                lCustomFieldContrat.Entity.IssueId   = lNewTicket.Entity.Id;
                //jc- affectation des constantes à la nouvelle raison
                lCustomFieldContrat.Entity.CustomFieldId = 124;
                lCustomFieldContrat.Entity.Created       = System.DateTime.Now;
                lCustomFieldContrat.Entity.Revised       = System.DateTime.Now;

                //jc- on enregistre la nouvelle cause
                lServiceData.Item.CustomFieldDataCreate(lCustomFieldContrat.Entity);
            }

            #endregion

            //jc- on retourne l'id du nouveau ticket crée
            return(lNewTicket.Id);
        }
Example #7
0
        /// <summary>
        /// Add the domain to the custom field, and create an auditlog if it hasn't just been created.
        /// </summary>
        /// <param name="args"></param>
        /// <param name="createAudit"></param>
        /// <returns></returns>
        private IssueDto AddDomain(IssueDtoEventArgs args, bool createAudit)
        {
            try
            {
                IssueDto issue  = args.Issue;
                Helper   helper = new Helper();
                if ((issue.CustomFields.Count > 0) && (!issue.CustomFields.Find(field => field.Name.Equals(helper.GetAppConfigValue("customFieldNameDomain"))).ToString().Equals(null)))
                {
                    CustomFieldDataDto erstellerOEField = issue.CustomFields.Find(field => field.Name.Equals(helper.GetAppConfigValue("customFieldNameDomain")));

                    // If there is no domain in the OE-Field yet
                    // Depending on whether you want users to manually change the OE-Field or not, .FormattedData or .Entity.Data could be chosen.
                    if (string.IsNullOrEmpty(erstellerOEField.Entity.Data))
                    {
                        string maildomain = helper.FindDomain(issue.OriginatorData);

                        // If no email address in OriginatorData present, take email address from creator user
                        if (string.IsNullOrEmpty(maildomain))
                        {
                            UserManager userManager = new UserManager(GeminiApp.Cache(), GeminiApp.UserContext(), args.Context);
                            int         userId;

                            // If created via another user
                            if (issue.Entity.ReportedBy > 0)
                            {
                                userId = issue.Entity.ReportedBy;
                            }
                            // If not
                            else
                            {
                                userId = args.User.Id;
                            }
                            UserDto creatorUser = userManager.Get(userId);
                            maildomain = helper.FindDomain(creatorUser.Entity.Email);
                        }
                        // OriginatorData has email address, no more actions required

                        string beforeValue = erstellerOEField.FormattedData;
                        erstellerOEField.Entity.Data   = maildomain;
                        erstellerOEField.FormattedData = maildomain;
                        // Keep in mind that args.Issue / issue / erstellerOEField are reference types, not value types

                        // Create auditlog if being called from BeforeUpdateFull with the auditlog flag
                        if (createAudit)
                        {
                            // beforeValue -> previous value (args.Issue FormattedData -> previous value)
                            // issue FormattedData -> new value (alternatively erstellerOEField.FormattedData)
                            if (!beforeValue.Equals(helper.GetFormattedDataErstellerOE(issue)))
                            {
                                IssueManager issueManager = new IssueManager(GeminiApp.Cache(), GeminiApp.UserContext(), args.Context);
                                helper.CreateAuditlog(args.Context, args.Issue.Entity.Id, args.Issue.Entity.ProjectId, erstellerOEField, beforeValue, erstellerOEField.FormattedData, args.User.Id, args.User.Fullname);
                            }
                        }
                    }
                    return(issue);
                }
                return(args.Issue);
            }
            catch (Exception exception)
            {
                GeminiApp.LogException(exception, false, exception.Message);
                return(args.Issue);
            }
        }