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); } } }
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); } } }