Пример #1
0
        /// <summary> Subscriptions </summary>
        void MergeSubscriptions()
        {
            SubscriptionModel[] subscriptions = Source.Subscriptions();
            if (subscriptions.Length == 0)
            {
                return;
            }

            SubscriptionModel[] destinationSubscriptions = Destination.Subscriptions();
            foreach (SubscriptionModel subscriptionModel in subscriptions)
            {
                // WHERE NOT EXISTS(SELECT * FROM Subscriptions WHERE reftype = 17 AND RefID = {model.TicketID} AND UserID = {proxy.UserID})
                if (!destinationSubscriptions.Where(s => s.User.UserID == subscriptionModel.User.UserID).Any())
                {
                    SubscriptionProxy subscriptionProxy = new SubscriptionProxy()
                    {
                        RefType = ReferenceType.Tickets,
                        RefID   = Destination.TicketID,
                        UserID  = subscriptionModel.User.UserID
                    };
                    Data_API.Create(Destination, subscriptionProxy);
                }

                Data_API.Delete(subscriptionModel);
            }
        }
Пример #2
0
        void MergeRelationships()
        {
            TicketRelationshipProxy[] proxies = Data_API.Read <TicketRelationshipProxy[]>(Source);
            TicketRelationshipModel   idNode;

            foreach (TicketRelationshipProxy proxy in proxies)
            {
                switch (GetState(proxy))
                {
                case TicketRelationship.SourceIsDestination:
                    idNode = new TicketRelationshipModel(Source, Destination, proxy.TicketRelationshipID);
                    Data_API.Delete(idNode);       // circular reference
                    break;

                case TicketRelationship.SourceTicket2:
                    TicketModel ticket2 = new TicketModel(Source.Connection, proxy.Ticket2ID);
                    idNode = new TicketRelationshipModel(Source, ticket2, proxy.TicketRelationshipID);
                    Data_API.Update(idNode, new UpdateArguments("Ticket1ID", Destination.TicketID));
                    break;

                case TicketRelationship.Ticket1Source:
                    TicketModel ticket1 = new TicketModel(Source.Connection, proxy.Ticket1ID);
                    idNode = new TicketRelationshipModel(ticket1, Source, proxy.TicketRelationshipID);
                    Data_API.Update(idNode, new UpdateArguments("Ticket2ID", Destination.TicketID));
                    break;
                }
            }
        }
Пример #3
0
        /// <summary> Merge1 </summary>
        public void Merge1()
        {
            if (!Connection.CanEdit()) // sufficient permissions?
            {
                return;
            }

            MergeAssets();
            MergeChildren();
            MergeContacts();
            MergeCustomers();
            MergeReminders();
            MergeTagLinks();
            MergeSubscriptions();
            MergeTaskAssociations();
            MergeRelationships();  // 1 and 2
            MergeQueuedTickets();
            MergeActions();

            Data_API.Delete(Source);
            //Source = null;
            //DataAPI.DataAPI.Update(Destination, null);  // update Date Modified
        }
Пример #4
0
        void MergeContacts()
        {
            UserTicketModel[] contacts = Source.UserTickets();
            if (contacts.Length == 0)
            {
                return;
            }

            UserTicketModel[] destinationContacts = Destination.UserTickets();
            foreach (UserTicketModel contact in contacts)
            {
                // WHERE NOT EXISTS(SELECT * FROM UserTickets WHERE TicketID ={model.TicketID} and UserID ={proxy.UserID})
                if (!destinationContacts.Where(c => c.User.UserID == contact.User.UserID).Any())
                {
                    ContactProxy contactProxy = new ContactProxy()
                    {
                        UserID = contact.User.UserID
                    };
                    Data_API.Create(Destination, contactProxy);
                }

                Data_API.Delete(contact);
            }
        }
Пример #5
0
        void MergeCustomers()
        {
            OrganizationTicketModel[] customers = Source.OrganizationTickets();
            if (customers.Length == 0)
            {
                return;
            }

            OrganizationTicketModel[] destinationCustomers = Destination.OrganizationTickets();
            foreach (OrganizationTicketModel customer in customers)
            {
                // WHERE NOT EXISTS(SELECT * FROM OrganizationTickets WHERE TicketID ={model.TicketID} and OrganizationId ={proxy.OrganizationID})
                if (!destinationCustomers.Where(c => c.Organization.OrganizationID == customer.Organization.OrganizationID).Any())
                {
                    CustomerProxy customerProxy = new CustomerProxy()
                    {
                        OrganizationID = customer.Organization.OrganizationID
                    };
                    Data_API.Create(Destination, customerProxy);
                }

                Data_API.Delete(customer);
            }
        }
Пример #6
0
        void MergeAssets()
        {
            AssetTicketModel[] assetTickets = Source.AssetTickets();
            if (assetTickets.Length == 0)
            {
                return;
            }

            AssetTicketModel[] destinationAssetTickets = Destination.AssetTickets();
            UpdateArguments    args = new UpdateArguments("TicketID", Destination.TicketID);

            foreach (AssetTicketModel assetTicket in assetTickets)
            {
                // WHERE NOT EXISTS (Select AssetTickets WITH (NOLOCK) WHERE AssetId = {asset} AND TicketId ={sourceTicket.TicketID})
                if (!destinationAssetTickets.Where(a => a.Asset.AssetID == assetTicket.Asset.AssetID).Any())
                {
                    Data_API.Update(assetTicket, args);
                }
                else
                {
                    Data_API.Delete(assetTicket);
                }
            }
        }
Пример #7
0
        public static string DeleteAttachment(int attachmentID, AttachmentProxy.References verifyRefType, int?verifyRefID = null)
        {
            string result = null;

            try
            {
                using (ConnectionContext connection = new ConnectionContext())
                {
                    // validate args
                    AttachmentProxy proxy = Data_API.ReadRefTypeProxy <AttachmentProxy>(connection, attachmentID);
                    result = proxy.FileName;

                    if (verifyRefType == AttachmentProxy.References.None) // support delete no matter the type?
                    {
                        verifyRefType = proxy.RefType;
                    }

                    if (!verifyRefID.HasValue) // if no explicit refID provided, use the proxy
                    {
                        verifyRefID = proxy.RefID;
                    }

                    // type safe construction
                    IAttachmentDestination model = null;
                    switch (verifyRefType)
                    {
                    case AttachmentProxy.References.Actions:
                        model = new ActionModel(connection, verifyRefID.Value);
                        if (!(model as ActionModel).CanEdit())      // is user authorized to do the delete?
                        {
                            return(null);
                        }
                        break;

                    case AttachmentProxy.References.Assets:
                        model = new AssetModel(connection, verifyRefID.Value);
                        break;

                    //case AttachmentProxy.References.ChatAttachments:
                    //    break;
                    case AttachmentProxy.References.CompanyActivity:
                    {
                        int organizationID = connection._db.ExecuteQuery <int>($"Select RefID from Notes WITH (NOLOCK) WHERE NoteID = {verifyRefID.Value}").Min();
                        model = new NoteModel(new OrganizationModel(connection, organizationID), verifyRefID.Value);
                    }
                    break;

                    case AttachmentProxy.References.ContactActivity:
                    {
                        int userID = connection._db.ExecuteQuery <int>($"Select RefID from Notes WITH (NOLOCK) WHERE NoteID = {verifyRefID.Value}").Min();
                        model = new NoteModel(new UserModel(connection, userID), verifyRefID.Value);
                    }
                    break;

                    //case AttachmentProxy.References.Contacts:
                    //    break;
                    //case AttachmentProxy.References.CustomerHubLogo:
                    //    break;
                    //case AttachmentProxy.References.None:
                    //    break;
                    case AttachmentProxy.References.Organizations:
                        model = new OrganizationModel(connection, verifyRefID.Value);
                        break;

                    case AttachmentProxy.References.ProductVersions:
                        model = new ProductVersionModel(connection, verifyRefID.Value);
                        break;

                    case AttachmentProxy.References.Tasks:
                        model = new TaskModel(connection, verifyRefID.Value);
                        break;

                    case AttachmentProxy.References.UserPhoto:
                    case AttachmentProxy.References.Users:
                        model = new UserModel(connection, verifyRefID.Value);
                        break;

                    case AttachmentProxy.References.WaterCooler:
                        model = new WatercoolerMsgModel(connection, verifyRefID.Value);
                        break;

                    default:
                        if (Debugger.IsAttached)
                        {
                            Debugger.Break();
                        }
                        throw new Exception($"unrecognized RefType {verifyRefType} in DeleteAttachment");
                    }

                    // do the delete
                    Data_API.Delete(new AttachmentModel(model, attachmentID));
                    AttachmentFile file = new AttachmentFile(model, proxy);
                    file.Delete();
                }
            }
            catch (Exception ex)
            {
                Data_API.LogMessage(ActionLogType.Delete, ReferenceType.Attachments, attachmentID, "Unable to delete attachment", ex);
            }
            return(result);
        }