예제 #1
0
        public virtual void DeleteDeal(int dealID)
        {
            var deal = GetByID(dealID);

            CRMSecurity.DemandAccessTo(deal);

            // Delete relative  keys
            _cache.Insert(_dealCacheKey, String.Empty);


            var tagNames = DbManager.ExecuteList(Query("crm_relationship_event").Select("id").Where(Exp.Eq("have_files", true) & Exp.Eq("entity_id", dealID) & Exp.Eq("entity_type", (int)EntityType.Opportunity)))
                           .Select(row => String.Format("RelationshipEvent{0}", row[0])).ToArray();

            using (var tx = DbManager.BeginTransaction(true))
            {
                DbManager.ExecuteNonQuery(Delete("crm_field_value").Where(Exp.Eq("entity_id", dealID) & Exp.Eq("entity_type", (int)EntityType.Opportunity)));

                DbManager.ExecuteNonQuery(new SqlDelete("crm_entity_contact")
                                          .Where(Exp.Eq("entity_id", dealID) & Exp.Eq("entity_type", EntityType.Opportunity)));

                DbManager.ExecuteNonQuery(Delete("crm_relationship_event")
                                          .Where(Exp.Eq("entity_id", dealID) & Exp.Eq("entity_type", EntityType.Opportunity)));

                DbManager.ExecuteNonQuery(Delete("crm_task")
                                          .Where(Exp.Eq("entity_id", dealID) & Exp.Eq("entity_type", EntityType.Opportunity)));

                DbManager.ExecuteNonQuery(new SqlDelete("crm_entity_tag").Where(Exp.Eq("entity_id", dealID) & Exp.Eq("entity_type", EntityType.Opportunity)));

                DbManager.ExecuteNonQuery(Delete("crm_deal").Where(Exp.Eq("id", dealID)));

                tx.Commit();
            }

            CoreContext.AuthorizationManager.RemoveAllAces(deal);

            if (tagNames.Length == 0)
            {
                return;
            }

            using (var tagdao = FilesIntegration.GetTagDao())
                using (var filedao = FilesIntegration.GetFileDao())
                {
                    var filesIDs = tagdao.GetTags(tagNames, TagType.System).Where(t => t.EntryType == FileEntryType.File).Select(t => t.EntryId).ToArray();

                    var store = FilesIntegration.GetStore();

                    foreach (var filesID in filesIDs)
                    {
                        filedao.DeleteFolder(filesID);
                        filedao.DeleteFile(filesID);
                    }
                }
        }
예제 #2
0
        public virtual void DeleteBatchContact(int[] contactID)
        {
            if (contactID == null || contactID.Length == 0)
            {
                return;
            }

            // Delete relative  keys
            _cache.Insert(_contactCacheKey, String.Empty);

            var contacts = GetContacts(contactID).Where(CRMSecurity.CanAccessTo).ToList();

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

            var personsID    = new List <int>();
            var companyID    = new List <int>();
            var newContactID = new List <int>();

            foreach (var contact in contacts)
            {
                newContactID.Add(contact.ID);

                if (contact is Company)
                {
                    companyID.Add(contact.ID);
                }
                else
                {
                    personsID.Add(contact.ID);
                }
            }

            contactID = newContactID.ToArray();

            using (var tx = DbManager.BeginTransaction())
            {
                DbManager.ExecuteNonQuery(Delete("crm_field_value").Where(Exp.In("entity_id", contactID)
                                                                          & Exp.In("entity_type", new[] { (int)EntityType.Contact, (int)EntityType.Person, (int)EntityType.Company })));

                DbManager.ExecuteNonQuery(Delete("crm_task").Where(Exp.In("contact_id", contactID)));
                DbManager.ExecuteNonQuery(new SqlDelete("crm_entity_tag")
                                          .Where(Exp.In("entity_id", contactID) & Exp.Eq("entity_type", (int)EntityType.Contact)));

                DbManager.ExecuteNonQuery(Delete("crm_relationship_event").Where(Exp.In("contact_id", contactID)));
                DbManager.ExecuteNonQuery(Update("crm_deal").Set("contact_id", 0).Where(Exp.In("contact_id", contactID)));

                if (companyID.Count > 0)
                {
                    DbManager.ExecuteNonQuery(Update("crm_contact").Set("company_id", 0).Where(Exp.In("company_id", companyID)));
                }

                if (personsID.Count > 0)
                {
                    RemoveRelative(null, EntityType.Person, personsID.ToArray());
                }

                RemoveRelative(contactID, EntityType.Any, null);

                DbManager.ExecuteNonQuery(Delete("crm_contact_info").Where(Exp.In("contact_id", contactID)));

                DbManager.ExecuteNonQuery(Delete("crm_contact").Where(Exp.In("id", contactID)));

                tx.Commit();
            }

            contacts.ForEach(contact => CoreContext.AuthorizationManager.RemoveAllAces(contact));


            using (var tagdao = FilesIntegration.GetTagDao())
                using (var filedao = FilesIntegration.GetFileDao())
                {
                    var tagNames = DbManager.ExecuteList(Query("crm_relationship_event").Select("id").Where(Exp.In("contact_id", contactID) & Exp.Eq("have_files", true)))
                                   .Select(row => String.Format("RelationshipEvent{0}", row[0])).ToArray();

                    if (tagNames.Length == 0)
                    {
                        return;
                    }

                    var filesIDs = tagdao.GetTags(tagNames, TagType.System).Where(t => t.EntryType == FileEntryType.File).Select(t => t.EntryId).ToArray();

                    var store = FilesIntegration.GetStore();

                    foreach (var filesID in filesIDs)
                    {
                        filedao.DeleteFolder(filesID);
                        filedao.DeleteFile(filesID);
                    }
                }
        }