Exemplo n.º 1
0
        /// <summary>
        /// Aggiunge un messeggio dal Manager/Resolver al Ticket indicato
        /// </summary>
        /// <param name="TicketId">Id Ticket</param>
        /// <param name="Text">Testo messaggio</param>
        /// <param name="Preview">Eventuale anteprima</param>
        /// <param name="HideToUser">Se nascondere il messaggio all'utente</param>
        /// <param name="MessageType">Tipo di messaggio</param>
        /// <param name="UpdateAccess">SE aggiornare l'accesso dell'utente al Ticket</param>
        /// <param name="UserType">Tipo utente (per messaggio e controllo)</param>
        /// <returns>Eventuali errori</returns>
        public Domain.Enums.TicketMessageSendError MessageSendMan(
            Int64 TicketId,
            String Text,
            String Preview,
            Boolean HideToUser,
            Domain.Enums.MessageType MessageType,
            Domain.Enums.MessageUserType UserType,
            Boolean UpdateAccess,
            ref Int64 NewMessageId,
            Int64 DraftId   = -1,
            Boolean IsDraft = false
            )
        {
            bool isTicketClosed = false;

            if (UserType == Domain.Enums.MessageUserType.none || UserType == Domain.Enums.MessageUserType.Partecipant ||
                CurrentPerson.TypeID == (int)UserTypeStandard.Guest ||
                CurrentPerson.TypeID == (int)UserTypeStandard.ExternalUser)
            {
                return(Domain.Enums.TicketMessageSendError.NoPermission);
            }

            if (String.IsNullOrEmpty(Text) || String.IsNullOrEmpty(Preview))
            {
                return(Domain.Enums.TicketMessageSendError.NoMessage);
            }


            Domain.TicketUser Usr = this.UserGetfromPerson(UC.CurrentUserID);
            if (Usr == null || Usr.Id <= 0)
            {
                return(Domain.Enums.TicketMessageSendError.NoPermission);
            }


            Ticket tk = Manager.Get <Ticket>(TicketId);

            if (tk == null)
            {
                return(Domain.Enums.TicketMessageSendError.TicketNotFound);
            }

            if (tk.IsDraft)
            {
                return(Domain.Enums.TicketMessageSendError.DraftTicket);
            }

            bool    IsNew = false;
            Message msg   = (from Message m in tk.Messages where m.IsDraft == true && m.Creator != null && m.Creator.Id == Usr.Id select m).FirstOrDefault();

            if (msg == null || msg.Id <= 0)
            {
                msg   = new Message();
                IsNew = true;
            }
            else
            {
                //    TEORICAMENTE NON SERVE, MA FORSE MEGLIO METTERCELO!!!
                if (DraftId != msg.Id)
                {
                    //UPDATE FILE MESSAGE ID, FROM DraftId To msgId!!!
                }
            }

            if (IsNew)
            {
                msg.CreateMetaInfo(CurrentPerson, UC.IpAddress, UC.ProxyIpAddress);
            }
            else
            {
                msg.UpdateMetaInfo(CurrentPerson, UC.IpAddress, UC.ProxyIpAddress);
            }

            msg.Text         = Text;
            msg.Preview      = Preview;
            msg.Creator      = Usr;
            msg.DisplayName  = "";
            msg.SendDate     = DateTime.Now;
            msg.ShowRealName = true;
            msg.Ticket       = tk;
            msg.Type         = MessageType;
            msg.UserType     = UserType;
            msg.Visibility   = !HideToUser;

            if (tk.Status == TicketStatus.closeSolved || tk.Status == TicketStatus.closeUnsolved)
            {
                isTicketClosed = true;
                msg.IsDraft    = true;
            }
            else
            {
                msg.IsDraft = IsDraft;
            }

            msg.Action   = Domain.Enums.MessageActionType.normal;
            msg.ToStatus = tk.Status;

            Domain.TicketUser usr = (from Assignment asg in tk.Assignemts where asg.AssignedTo != null orderby asg.CreatedOn select asg.AssignedTo).FirstOrDefault();

            msg.ToUser = usr;

            Domain.Category cat = (from Assignment asg in tk.Assignemts where asg.AssignedCategory != null orderby asg.CreatedOn select asg.AssignedCategory).FirstOrDefault();

            if (cat == null)
            {
                cat = tk.CreationCategory;
            }

            msg.ToCategory = cat;

            if (IsNew)
            {
                tk.Messages.Add(msg);
            }
            //else
            //    Manager.SaveOrUpdate<Message>(msg);

            tk.UpdateMetaInfo(CurrentPerson, UC.IpAddress, UC.ProxyIpAddress);
            Manager.SaveOrUpdate <Ticket>(tk);

            if (UpdateAccess)
            {
                this.UserAccessUpdate(tk.Id);
            }

            NewMessageId = msg.Id;

            if (isTicketClosed)
            {
                return(TicketMessageSendError.TicketClosed);
            }

            return(Domain.Enums.TicketMessageSendError.none);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Aggiunge un messeggio DELL'UTENTE al Ticket indicato
        /// </summary>
        /// <param name="TicketId">Id Ticket</param>
        /// <param name="Text">Testo messaggio</param>
        /// <param name="Preview">Eventuale anteprima</param>
        /// <param name="ChangeStatus">Indica se dopo l'invio il ticket dovrà modificare il suo stato (riapertura/chiusura)</param>
        /// <param name="NewStatus">Il nuovo stato (se va modificato)</param>
        /// <returns>Eventuali errori</returns>
        public Domain.Enums.TicketMessageSendError MessageSendUser(
            Int64 TicketId,
            String Text,
            String Preview,
            ref Int64 MessageId,
            Boolean IsDraft = false)
        {
            //Message ChkMsg = Manager.Get<Message>(DraftId);
            //if(!ChkMsg.IsDraft)
            //    return TicketMessageSendError.none;


            bool isTicketClosed = false;

            if (String.IsNullOrEmpty(Text) || String.IsNullOrEmpty(Preview))
            {
                return(Domain.Enums.TicketMessageSendError.NoMessage);
            }

            Ticket tk = Manager.Get <Ticket>(TicketId);

            if (tk == null)
            {
                return(Domain.Enums.TicketMessageSendError.TicketNotFound);
            }

            if (tk.IsDraft)
            {
                return(Domain.Enums.TicketMessageSendError.DraftTicket);
            }

            Domain.TicketUser Usr = this.CurrentUser;

            if (tk.Owner.Id != Usr.Id)
            {
                if (!tk.IsBehalf)
                {
                    return(Domain.Enums.TicketMessageSendError.NoPermission);
                }

                if (!this.SettingPermissionGet(Domain.Enums.PermissionType.Behalf))
                {
                    return(Domain.Enums.TicketMessageSendError.NoPermission);
                }
            }


            if (!Manager.IsInTransaction())
            {
                Manager.BeginTransaction();
            }


            //this.UserGetfromPerson(UC.CurrentUserID);


            if (Usr == null || Usr.Id <= 0)
            {
                return(Domain.Enums.TicketMessageSendError.NoPermission);
            }

            bool IsNew    = false;
            bool IsBehalf = false;

            Message msg = new Message();

            if (!tk.IsBehalf || tk.Owner.Id == Usr.Id)
            {
                msg = (from Message m in tk.Messages
                       where m.IsDraft == true &&
                       m.Creator != null && m.Creator.Id == Usr.Id
                       select m).FirstOrDefault();
            }
            else
            {
                msg = (from Message m in tk.Messages
                       where m.IsDraft == true &&
                       m.CreatedBy != null && m.CreatedBy.Id == this.CurrentPerson.Id
                       select m).FirstOrDefault();
                IsBehalf = true;
            }


            if (msg == null || msg.Id <= 0)
            {
                //msg = Manager.Get<Message>(DraftId);
                //if (!msg.IsDraft)
                //{
                //    return TicketMessageSendError.none;
                //}
                //else if (msg.Ticket == null || msg.Ticket.Id != TicketId)
                //{
                msg   = new Message();
                IsNew = true;
                //}
            }
            //else
            //{

            //    //    TEORICAMENTE NON SERVE, MA FORSE MEGLIO METTERCELO!!!
            //    if (DraftId != msg.Id)
            //    {
            //        //UPDATE FILE MESSAGE ID, FROM DraftId To msgId!!!
            //    }
            //}

            if (IsNew)
            {
                msg.CreateMetaInfo(CurrentPerson, UC.IpAddress, UC.ProxyIpAddress);
            }
            else
            {
                msg.UpdateMetaInfo(CurrentPerson, UC.IpAddress, UC.ProxyIpAddress);
            }

            msg.Text    = Text;
            msg.Preview = Preview;
            //msg.Creator = Usr;
            msg.Creator      = tk.Owner;
            msg.DisplayName  = "";
            msg.SendDate     = DateTime.Now;
            msg.ShowRealName = true;
            msg.Ticket       = tk;
            msg.Type         = Domain.Enums.MessageType.Request;
            msg.UserType     = Domain.Enums.MessageUserType.Partecipant;
            msg.Visibility   = true;

            if (tk.Status == TicketStatus.closeSolved || tk.Status == TicketStatus.closeUnsolved)
            {
                msg.IsDraft    = true;
                isTicketClosed = true;
            }
            else
            {
                msg.IsDraft = IsDraft;
            }

            msg.Action   = Domain.Enums.MessageActionType.normal;
            msg.ToStatus = tk.Status;

            msg.IsBehalf = IsBehalf;

            Domain.TicketUser Asusr = (from Assignment asg in tk.Assignemts where asg.AssignedTo != null orderby asg.CreatedOn select asg.AssignedTo).FirstOrDefault();

            msg.ToUser = Asusr;

            Domain.Category cat = (from Assignment asg in tk.Assignemts where asg.AssignedCategory != null orderby asg.CreatedOn select asg.AssignedCategory).FirstOrDefault();

            if (cat == null)
            {
                cat = tk.CreationCategory;
            }

            msg.ToCategory = cat;

            if (IsNew)
            {
                tk.Messages.Add(msg);
            }
            else
            {
                Manager.SaveOrUpdate <Message>(msg);
            }

            MessageId = msg.Id;

            //TOLTO:
            // Verrà visualizzato nella VIEW il messaggio "Creato da..." per TUTTI i messaggi in Behalf.
            // Il messaggio di sistema verrà utilizzato SOLO per indicare che TUTTO il Ticket è passato nello stato di BEHALF.

            //if (IsBehalf)
            //{
            //    Message msgBehalf = new Message();
            //    msgBehalf.CreateMetaInfo(CurrentPerson, UC.IpAddress, UC.ProxyIpAddress);
            //    //RIVEDERE!!!

            //    msgBehalf.Text = "Created by: " + msg.CreatedBy.SurnameAndName;
            //    msgBehalf.Preview = "";
            //    msgBehalf.Creator = this.CurrentUser;
            //    msgBehalf.DisplayName = "";
            //    msgBehalf.SendDate = DateTime.Now;
            //    msgBehalf.ShowRealName = true;
            //    msgBehalf.Ticket = tk;
            //    msgBehalf.Type = Domain.Enums.MessageType.System;
            //    msgBehalf.UserType = msg.UserType;
            //    msgBehalf.Visibility = true;

            //    msgBehalf.Action = Domain.Enums.MessageActionType.behalfMessage;
            //    msgBehalf.ToStatus = tk.Status;
            //    msgBehalf.ToUser = tk.Owner;
            //    msgBehalf.ToCategory = msg.ToCategory;
            //    msgBehalf.IsBehalf = true;
            //    //Manager.SaveOrUpdate<Message>(msgBehalf);
            //    tk.Messages.Add(msgBehalf);
            //}



            tk.UpdateMetaInfo(CurrentPerson, UC.IpAddress, UC.ProxyIpAddress);

            if (tk.Owner.Id == this.CurrentUser.Id)
            {
                tk.LastUserAccess = DateTime.Now;
            }
            else
            {
                tk.LastCreatorAccess = DateTime.Now;
            }


            Manager.SaveOrUpdate <Ticket>(tk);

            try
            {
                Manager.Commit();
            }
            catch (Exception)
            {
                Manager.RollBack();
            }

            if (isTicketClosed)
            {
                return(TicketMessageSendError.TicketClosed);
            }

            return(Domain.Enums.TicketMessageSendError.none);
        }