public override bool VisibleFor(Feed feed, object data, Guid userId) { return(base.VisibleFor(feed, data, userId) && CRMSecurity.CanGoToFeed((Task)data)); }
private Task SaveOrUpdateTaskInDb(Task newTask) { if (String.IsNullOrEmpty(newTask.Title) || newTask.DeadLine == DateTime.MinValue || newTask.CategoryID <= 0) { throw new ArgumentException(); } if (newTask.ID == 0 || Db.ExecuteScalar <int>(Query("crm_task").SelectCount().Where(Exp.Eq("id", newTask.ID))) == 0) { newTask.CreateOn = DateTime.UtcNow; newTask.CreateBy = ASC.Core.SecurityContext.CurrentAccount.ID; newTask.LastModifedOn = DateTime.UtcNow; newTask.LastModifedBy = ASC.Core.SecurityContext.CurrentAccount.ID; newTask.ID = Db.ExecuteScalar <int>( Insert("crm_task") .InColumnValue("id", 0) .InColumnValue("title", newTask.Title) .InColumnValue("description", newTask.Description) .InColumnValue("deadline", TenantUtil.DateTimeToUtc(newTask.DeadLine)) .InColumnValue("responsible_id", newTask.ResponsibleID) .InColumnValue("contact_id", newTask.ContactID) .InColumnValue("entity_type", (int)newTask.EntityType) .InColumnValue("entity_id", newTask.EntityID) .InColumnValue("is_closed", newTask.IsClosed) .InColumnValue("category_id", newTask.CategoryID) .InColumnValue("create_on", newTask.CreateOn) .InColumnValue("create_by", newTask.CreateBy) .InColumnValue("last_modifed_on", newTask.LastModifedOn) .InColumnValue("last_modifed_by", newTask.LastModifedBy) .InColumnValue("alert_value", newTask.AlertValue) .Identity(1, 0, true)); } else { var oldTask = Db.ExecuteList(GetTaskQuery(Exp.Eq("id", newTask.ID))) .ConvertAll(row => ToTask(row)) .FirstOrDefault(); CRMSecurity.DemandEdit(oldTask); newTask.CreateOn = oldTask.CreateOn; newTask.CreateBy = oldTask.CreateBy; newTask.LastModifedOn = DateTime.UtcNow; newTask.LastModifedBy = ASC.Core.SecurityContext.CurrentAccount.ID; newTask.IsClosed = oldTask.IsClosed; Db.ExecuteNonQuery( Update("crm_task") .Set("title", newTask.Title) .Set("description", newTask.Description) .Set("deadline", TenantUtil.DateTimeToUtc(newTask.DeadLine)) .Set("responsible_id", newTask.ResponsibleID) .Set("contact_id", newTask.ContactID) .Set("entity_type", (int)newTask.EntityType) .Set("entity_id", newTask.EntityID) .Set("category_id", newTask.CategoryID) .Set("last_modifed_on", newTask.LastModifedOn) .Set("last_modifed_by", newTask.LastModifedBy) .Set("alert_value", (int)newTask.AlertValue) .Set("exec_alert", 0) .Where(Exp.Eq("id", newTask.ID))); } return(newTask); }
public int GetDealsCount(String searchText, Guid responsibleID, int milestoneID, IEnumerable <String> tags, int contactID, DealMilestoneStatus?stageType, bool?contactAlsoIsParticipant, DateTime fromDate, DateTime toDate) { var cacheKey = TenantID.ToString(CultureInfo.InvariantCulture) + "deals" + SecurityContext.CurrentAccount.ID.ToString() + searchText + responsibleID + milestoneID + contactID; if (tags != null) { cacheKey += String.Join("", tags.ToArray()); } if (stageType.HasValue) { cacheKey += stageType.Value; } if (contactAlsoIsParticipant.HasValue) { cacheKey += contactAlsoIsParticipant.Value; } if (fromDate != DateTime.MinValue) { cacheKey += fromDate.ToString(); } if (toDate != DateTime.MinValue) { cacheKey += toDate.ToString(); } var fromCache = _cache.Get <string>(cacheKey); if (fromCache != null) { return(Convert.ToInt32(fromCache)); } var withParams = !(String.IsNullOrEmpty(searchText) && responsibleID == Guid.Empty && milestoneID <= 0 && (tags == null || !tags.Any()) && contactID <= 0 && stageType == null && contactAlsoIsParticipant == null && fromDate == DateTime.MinValue && toDate == DateTime.MinValue); ICollection <int> exceptIDs = CRMSecurity.GetPrivateItems(typeof(Deal)).ToList(); int result; using (var db = GetDb()) { if (withParams) { var whereConditional = WhereConditional(exceptIDs, searchText, responsibleID, milestoneID, tags, contactID, stageType, contactAlsoIsParticipant); var sqlQuery = GetDealSqlQuery(whereConditional); if (fromDate != DateTime.MinValue && toDate != DateTime.MinValue) { sqlQuery.Having(Exp.Between("close_date", TenantUtil.DateTimeToUtc(fromDate), TenantUtil.DateTimeToUtc(toDate))); result = db.ExecuteList(sqlQuery).Count; } else if (whereConditional == null) { result = 0; } else { result = db.ExecuteList(sqlQuery).Count; } } else { var countWithoutPrivate = db.ExecuteScalar <int>(Query("crm_deal").SelectCount()); var privateCount = exceptIDs.Count; if (privateCount > countWithoutPrivate) { _log.Error("Private deals count more than all deals"); privateCount = 0; } result = countWithoutPrivate - privateCount; } } if (result > 0) { _cache.Insert(cacheKey, result, TimeSpan.FromSeconds(30)); } return(result); }
protected void ExecCasesDetailsView(ASC.CRM.Core.Entities.Cases targetCase) { var casesDetailsViewControl = (CasesDetailsView)LoadControl(CasesDetailsView.Location); casesDetailsViewControl.TargetCase = targetCase; CommonContainerHolder.Controls.Add(casesDetailsViewControl); var title = targetCase.Title; Master.CurrentPageCaption = title; Master.CommonContainerHeader = Global.RenderItemHeaderWithMenu(title.HtmlEncode(), EntityType.Case, CRMSecurity.IsPrivate(targetCase), true); Title = HeaderStringHelper.GetPageTitle(title); }
public List <Task> GetTasks( String searchText, Guid responsibleID, int categoryID, bool?isClosed, DateTime fromDate, DateTime toDate, EntityType entityType, int entityID, int from, int count, OrderBy orderBy) { if (CRMSecurity.IsAdmin) { return(GetCrudeTasks( searchText, responsibleID, categoryID, isClosed, fromDate, toDate, entityType, entityID, from, count, orderBy)); } var crudeTasks = GetCrudeTasks( searchText, responsibleID, categoryID, isClosed, fromDate, toDate, entityType, entityID, 0, from + count, orderBy); if (crudeTasks.Count == 0) { return(crudeTasks); } if (crudeTasks.Count < from + count) { return(CRMSecurity.FilterRead(crudeTasks).Skip(from).ToList()); } var result = CRMSecurity.FilterRead(crudeTasks).ToList(); if (result.Count == crudeTasks.Count) { return(result.Skip(from).ToList()); } var localCount = count; var localFrom = from + count; while (true) { crudeTasks = GetCrudeTasks( searchText, responsibleID, categoryID, isClosed, fromDate, toDate, entityType, entityID, localFrom, localCount, orderBy); if (crudeTasks.Count == 0) { break; } result.AddRange(CRMSecurity.FilterRead(crudeTasks)); if ((result.Count >= count + from) || (crudeTasks.Count < localCount)) { break; } localFrom += localCount; localCount = localCount * 2; } return(result.Skip(from).Take(count).ToList()); }
public RelationshipEvent CreateItem(RelationshipEvent item) { CRMSecurity.DemandCreateOrUpdate(item); var htmlBody = String.Empty; if (item.CreateOn == DateTime.MinValue) { item.CreateOn = TenantUtil.DateTimeNow(); } item.CreateBy = ASC.Core.SecurityContext.CurrentAccount.ID; item.LastModifedBy = ASC.Core.SecurityContext.CurrentAccount.ID; if (item.CategoryID == (int)HistoryCategorySystem.MailMessage) { var jsonObj = JObject.Parse(item.Content); var messageId = jsonObj.Value <Int32>("message_id"); var apiServer = new Api.ApiServer(); var msg = apiServer.GetApiResponse( String.Format("{0}mail/messages/{1}.json?id={1}&loadImages=true&needSanitize=true", SetupInfo.WebApiBaseUrl, messageId), "GET"); if (msg == null) { throw new ArgumentException("Mail message cannot be found"); } var msgResponseWrapper = JObject.Parse(Encoding.UTF8.GetString(Convert.FromBase64String(msg))); var msgRequestObj = msgResponseWrapper.Value <JObject>("response"); string messageUrl; htmlBody = msgRequestObj.Value <String>("htmlBody"); using (var fileStream = new MemoryStream(Encoding.UTF8.GetBytes(htmlBody))) { var filePath = String.Format("folder_{0}/message_{1}.html", (messageId / 1000 + 1) * 1000, messageId); Global.GetStore().Save("mail_messages", filePath, fileStream); messageUrl = String.Format("{0}HttpHandlers/filehandler.ashx?action=mailmessage&message_id={1}", PathProvider.BaseAbsolutePath, messageId).ToLower(); } var msg_date_created = msgRequestObj.Value <String>("date"); var message_id = msgRequestObj.Value <Int32>("id"); item.Content = JsonConvert.SerializeObject(new { @from = msgRequestObj.Value <String>("from"), to = msgRequestObj.Value <String>("to"), cc = msgRequestObj.Value <String>("cc"), bcc = msgRequestObj.Value <String>("bcc"), subject = msgRequestObj.Value <String>("subject"), important = msgRequestObj.Value <Boolean>("important"), chain_id = msgRequestObj.Value <String>("chainId"), is_sended = msgRequestObj.Value <Int32>("folder") != 1, date_created = msg_date_created, introduction = msgRequestObj.Value <String>("introduction"), message_id = message_id, message_url = messageUrl }); item.CreateOn = DateTime.Parse(msg_date_created, CultureInfo.InvariantCulture); var sqlQueryFindMailsAlready = Query("crm_relationship_event") .SelectCount() .Where("contact_id", item.ContactID) .Where(Exp.Like("content", string.Format("\"message_id\":{0},", message_id))) .Where("entity_type", (int)item.EntityType) .Where("entity_id", item.EntityID) .Where("category_id", item.CategoryID); if (Db.ExecuteScalar <int>(sqlQueryFindMailsAlready) > 0) { throw new Exception("Already exists"); } } item.ID = Db.ExecuteScalar <int>( Insert("crm_relationship_event") .InColumnValue("id", 0) .InColumnValue("contact_id", item.ContactID) .InColumnValue("content", item.Content) .InColumnValue("create_on", TenantUtil.DateTimeToUtc(item.CreateOn)) .InColumnValue("create_by", item.CreateBy) .InColumnValue("entity_type", (int)item.EntityType) .InColumnValue("entity_id", item.EntityID) .InColumnValue("category_id", item.CategoryID) .InColumnValue("last_modifed_on", DateTime.UtcNow) .InColumnValue("last_modifed_by", item.LastModifedBy) .InColumnValue("have_files", false) .Identity(1, 0, true)); if (item.CreateOn.Kind == DateTimeKind.Utc) { item.CreateOn = TenantUtil.DateTimeFromUtc(item.CreateOn); } FactoryIndexer <EventsWrapper> .IndexAsync(item); return(item); }
public VoipUpload DeleteUploadedFile(AudioType audioType, string fileName) { if (!CRMSecurity.IsAdmin) { throw CRMSecurity.CreateSecurityException(); } var store = Global.GetStore(); var path = Path.Combine(audioType.ToString().ToLower(), fileName); var result = new VoipUpload { AudioType = audioType, Name = fileName, Path = CommonLinkUtility.GetFullAbsolutePath(store.GetUri(path).ToString()) }; if (!store.IsFile("voip", path)) { throw new ItemNotFoundException(); } store.Delete("voip", path); var dao = DaoFactory.VoipDao; var numbers = dao.GetNumbers(); var defAudio = StorageFactory.GetStorage("", "crm").ListFiles("voip", "default/" + audioType.ToString().ToLower(), "*.*", true).FirstOrDefault(); if (defAudio == null) { return(result); } foreach (var number in numbers) { switch (audioType) { case AudioType.Greeting: if (number.Settings.GreetingAudio == result.Path) { number.Settings.GreetingAudio = CommonLinkUtility.GetFullAbsolutePath(defAudio.ToString()); } break; case AudioType.HoldUp: if (number.Settings.HoldAudio == result.Path) { number.Settings.HoldAudio = CommonLinkUtility.GetFullAbsolutePath(defAudio.ToString()); } break; case AudioType.Queue: var queue = number.Settings.Queue; if (queue != null && queue.WaitUrl == result.Path) { queue.WaitUrl = CommonLinkUtility.GetFullAbsolutePath(defAudio.ToString()); } break; case AudioType.VoiceMail: if (number.Settings.VoiceMail == result.Path) { number.Settings.VoiceMail = CommonLinkUtility.GetFullAbsolutePath(defAudio.ToString()); } break; } dao.SaveOrUpdateNumber(number); } return(result); }
public int GetInvoicesCount( String searchText, InvoiceStatus?status, DateTime issueDateFrom, DateTime issueDateTo, DateTime dueDateFrom, DateTime dueDateTo, EntityType entityType, int entityID, String currency) { var cacheKey = TenantID.ToString(CultureInfo.InvariantCulture) + "invoice" + SecurityContext.CurrentAccount.ID.ToString() + searchText; var fromCache = _cache.Get(cacheKey); if (fromCache != null) { return(Convert.ToInt32(fromCache)); } var withParams = hasParams(searchText, status, issueDateFrom, issueDateTo, dueDateFrom, dueDateTo, entityType, entityID, currency); var exceptIDs = CRMSecurity.GetPrivateItems(typeof(Invoice)).ToList(); int result; using (var db = GetDb()) { if (withParams) { var whereConditional = WhereConditional(null, exceptIDs, searchText, status, issueDateFrom, issueDateTo, dueDateFrom, dueDateTo, entityType, entityID, currency); result = whereConditional != null?db.ExecuteScalar <int>(Query("crm_invoice").Where(whereConditional).SelectCount()) : 0; } else { var countWithoutPrivate = db.ExecuteScalar <int>(Query("crm_invoice").SelectCount()); var privateCount = exceptIDs.Count; if (privateCount > countWithoutPrivate) { _log.ErrorFormat(@"Private invoice count more than all cases. Tenant: {0}. CurrentAccount: {1}", TenantID, SecurityContext.CurrentAccount.ID); privateCount = 0; } result = countWithoutPrivate - privateCount; } } if (result > 0) { _cache.Remove(cacheKey); _cache.Insert(cacheKey, result, new CacheDependency(null, new[] { _invoiceCacheKey }), Cache.NoAbsoluteExpiration, TimeSpan.FromSeconds(30)); } return(result); }
private int SaveOrUpdateInvoice(Invoice invoice, DbManager db) { if (String.IsNullOrEmpty(invoice.Number) || invoice.IssueDate == DateTime.MinValue || invoice.ContactID <= 0 || invoice.DueDate == DateTime.MinValue || String.IsNullOrEmpty(invoice.Currency) || invoice.ExchangeRate <= 0 || String.IsNullOrEmpty(invoice.Terms)) { throw new ArgumentException(); } invoice.PurchaseOrderNumber = !String.IsNullOrEmpty(invoice.PurchaseOrderNumber) ? invoice.PurchaseOrderNumber : String.Empty; if (!IsExist(invoice.ID, db)) { if (IsExist(invoice.Number, db)) { throw new ArgumentException(); } invoice.ID = db.ExecuteScalar <int>( Insert("crm_invoice") .InColumnValue("id", 0) .InColumnValue("status", (int)invoice.Status) .InColumnValue("number", invoice.Number) .InColumnValue("issue_date", TenantUtil.DateTimeToUtc(invoice.IssueDate)) .InColumnValue("template_type", invoice.TemplateType) .InColumnValue("contact_id", invoice.ContactID) .InColumnValue("consignee_id", invoice.ConsigneeID) .InColumnValue("entity_type", (int)invoice.EntityType) .InColumnValue("entity_id", invoice.EntityID) .InColumnValue("due_date", TenantUtil.DateTimeToUtc(invoice.DueDate)) .InColumnValue("language", invoice.Language) .InColumnValue("currency", invoice.Currency) .InColumnValue("exchange_rate", invoice.ExchangeRate) .InColumnValue("purchase_order_number", invoice.PurchaseOrderNumber) .InColumnValue("terms", invoice.Terms) .InColumnValue("description", invoice.Description) .InColumnValue("json_data", null) .InColumnValue("file_id", 0) .InColumnValue("create_on", DateTime.UtcNow) .InColumnValue("create_by", SecurityContext.CurrentAccount.ID) .InColumnValue("last_modifed_on", DateTime.UtcNow) .InColumnValue("last_modifed_by", SecurityContext.CurrentAccount.ID) .Identity(1, 0, true)); } else { var oldInvoice = db.ExecuteList(GetInvoiceSqlQuery(Exp.Eq("id", invoice.ID), null)) .ConvertAll(ToInvoice) .FirstOrDefault(); CRMSecurity.DemandEdit(oldInvoice); db.ExecuteNonQuery( Update("crm_invoice") .Set("status", (int)invoice.Status) .Set("issue_date", TenantUtil.DateTimeToUtc(invoice.IssueDate)) .Set("template_type", invoice.TemplateType) .Set("contact_id", invoice.ContactID) .Set("consignee_id", invoice.ConsigneeID) .Set("entity_type", (int)invoice.EntityType) .Set("entity_id", invoice.EntityID) .Set("due_date", TenantUtil.DateTimeToUtc(invoice.DueDate)) .Set("language", invoice.Language) .Set("currency", invoice.Currency) .Set("exchange_rate", invoice.ExchangeRate) .Set("purchase_order_number", invoice.PurchaseOrderNumber) .Set("terms", invoice.Terms) .Set("description", invoice.Description) .Set("json_data", null) .Set("file_id", 0) .Set("last_modifed_on", DateTime.UtcNow) .Set("last_modifed_by", SecurityContext.CurrentAccount.ID) .Where(Exp.Eq("id", invoice.ID))); } return(invoice.ID); }
protected void ExecDealDetailsView(Deal targetDeal) { if (!CRMSecurity.CanAccessTo(targetDeal)) { Response.Redirect(PathProvider.StartURL()); } var dealActionViewControl = (DealDetailsView)LoadControl(DealDetailsView.Location); dealActionViewControl.TargetDeal = targetDeal; CommonContainerHolder.Controls.Add(dealActionViewControl); var headerTitle = targetDeal.Title.HtmlEncode(); Master.CurrentPageCaption = headerTitle; Master.CommonContainerHeader = Global.RenderItemHeaderWithMenu(headerTitle, EntityType.Opportunity, CRMSecurity.IsPrivate(targetDeal), true); Title = HeaderStringHelper.GetPageTitle(headerTitle); }
public List <Invoice> GetInvoices( String searchText, InvoiceStatus?status, DateTime issueDateFrom, DateTime issueDateTo, DateTime dueDateFrom, DateTime dueDateTo, EntityType entityType, int entityID, String currency, int from, int count, OrderBy orderBy) { if (CRMSecurity.IsAdmin) { return(GetCrudeInvoices( searchText, status, issueDateFrom, issueDateTo, dueDateFrom, dueDateTo, entityType, entityID, currency, from, count, orderBy)); } var crudeInvoices = GetCrudeInvoices( searchText, status, issueDateFrom, issueDateTo, dueDateFrom, dueDateTo, entityType, entityID, currency, 0, from + count, orderBy); if (crudeInvoices.Count == 0) { return(crudeInvoices); } if (crudeInvoices.Count < from + count) { return(CRMSecurity.FilterRead(crudeInvoices).Skip(from).ToList()); } var result = CRMSecurity.FilterRead(crudeInvoices).ToList(); if (result.Count == crudeInvoices.Count) { return(result.Skip(from).ToList()); } var localCount = count; var localFrom = from + count; while (true) { crudeInvoices = GetCrudeInvoices( searchText, status, issueDateFrom, issueDateTo, dueDateFrom, dueDateTo, entityType, entityID, currency, localFrom, localCount, orderBy); if (crudeInvoices.Count == 0) { break; } result.AddRange(CRMSecurity.FilterRead(crudeInvoices)); if ((result.Count >= count + from) || (crudeInvoices.Count < localCount)) { break; } localFrom += localCount; localCount = localCount * 2; } return(result.Skip(from).Take(count).ToList()); }
public int GetCasesCount( String searchText, int contactID, bool?isClosed, IEnumerable <String> tags) { var cacheKey = TenantID.ToString(CultureInfo.InvariantCulture) + "cases" + SecurityContext.CurrentAccount.ID.ToString() + searchText + contactID; if (tags != null) { cacheKey += String.Join("", tags.ToArray()); } if (isClosed.HasValue) { cacheKey += isClosed.Value; } var fromCache = _cache.Get <string>(cacheKey); if (fromCache != null) { return(Convert.ToInt32(fromCache)); } var withParams = !(String.IsNullOrEmpty(searchText) && contactID <= 0 && isClosed == null && (tags == null || !tags.Any())); var exceptIDs = CRMSecurity.GetPrivateItems(typeof(Cases)).ToList(); int result; if (withParams) { var whereConditional = WhereConditional(exceptIDs, searchText, contactID, isClosed, tags); result = whereConditional != null?Db.ExecuteScalar <int>(Query("crm_case").Where(whereConditional).SelectCount()) : 0; } else { var countWithoutPrivate = Db.ExecuteScalar <int>(Query("crm_case").SelectCount()); var privateCount = exceptIDs.Count; if (privateCount > countWithoutPrivate) { _log.ErrorFormat(@"Private cases count more than all cases. Tenant: {0}. CurrentAccount: {1}", TenantID, SecurityContext.CurrentAccount.ID); privateCount = 0; } result = countWithoutPrivate - privateCount; } if (result > 0) { _cache.Insert(cacheKey, result, TimeSpan.FromSeconds(30)); } return(result); }
public static void DataContactFullCardView(BasePage page, Contact targetContact) { List <CustomField> data; if (targetContact is Company) { data = Global.DaoFactory.GetCustomFieldDao().GetEnityFields(EntityType.Company, targetContact.ID, false); } else { data = Global.DaoFactory.GetCustomFieldDao().GetEnityFields(EntityType.Person, targetContact.ID, false); } var networks = Global.DaoFactory.GetContactInfoDao().GetList(targetContact.ID, null, null, null).ConvertAll( n => new { data = n.Data.HtmlEncode(), infoType = n.InfoType, isPrimary = n.IsPrimary, categoryName = n.CategoryToString(), infoTypeLocalName = n.InfoType.ToLocalizedString() }); String json; using (var stream = new MemoryStream()) { var serializer = new DataContractJsonSerializer(data.GetType()); serializer.WriteObject(stream, data); json = Encoding.UTF8.GetString(stream.ToArray()); } var listItems = Global.DaoFactory.GetListItemDao().GetItems(ListType.ContactStatus); var tags = Global.DaoFactory.GetTagDao().GetEntityTags(EntityType.Contact, targetContact.ID); var availableTags = Global.DaoFactory.GetTagDao().GetAllTags(EntityType.Contact).Where(item => !tags.Contains(item)); var responsibleIDs = CRMSecurity.GetAccessSubjectGuidsTo(targetContact); var script = String.Format(@" var customFieldList = {0}; var contactNetworks = {1}; var sliderListItems = {2}; var contactTags = {3}; var contactAvailableTags = {4}; var contactResponsibleIDs = {5}; ", json, JsonConvert.SerializeObject(networks), JsonConvert.SerializeObject(new { id = targetContact.ID, status = targetContact.StatusID, positionsCount = listItems.Count, items = listItems.ConvertAll(n => new { id = n.ID, color = n.Color, title = n.Title.HtmlEncode() }) }), JsonConvert.SerializeObject(tags.ToList().ConvertAll(t => t.HtmlEncode())), JsonConvert.SerializeObject(availableTags.ToList().ConvertAll(t => t.HtmlEncode())), JsonConvert.SerializeObject(responsibleIDs) ); page.RegisterInlineScript(script, onReady: false); }
private SearchResultItem[] ToSearchResultItem(IEnumerable <object[]> rows) { var result = new List <SearchResultItem>(); foreach (var row in rows) { var containerType = ((EntityType)Convert.ToInt32(row[0])); var id = row[1]; string imageRef; String url; switch (containerType) { case EntityType.Contact: { var contact = DaoFactory.ContactDao.GetByID(Convert.ToInt32(id)); if (contact == null || !CRMSecurity.CanAccessTo(contact)) { continue; } url = String.Format("default.aspx?id={0}", id); if (contact is Company) { imageRef = WebImageSupplier.GetAbsoluteWebPath("companies_widget.png", ProductEntryPoint.ID); } else { imageRef = WebImageSupplier.GetAbsoluteWebPath("people_widget.png", ProductEntryPoint.ID); } break; } case EntityType.Opportunity: { var deal = DaoFactory.DealDao.GetByID(Convert.ToInt32(id)); if (deal == null || !CRMSecurity.CanAccessTo(deal)) { continue; } url = String.Format("deals.aspx?id={0}", id); imageRef = WebImageSupplier.GetAbsoluteWebPath("deal_widget.png", ProductEntryPoint.ID); break; } case EntityType.Case: { var cases = DaoFactory.CasesDao.GetByID(Convert.ToInt32(id)); if (cases == null || !CRMSecurity.CanAccessTo(cases)) { continue; } url = String.Format("cases.aspx?id={0}", id); imageRef = WebImageSupplier.GetAbsoluteWebPath("cases_widget.png", ProductEntryPoint.ID); break; } case EntityType.Task: { var task = DaoFactory.TaskDao.GetByID(Convert.ToInt32(id)); if (task == null || !CRMSecurity.CanAccessTo(task)) { continue; } url = ""; imageRef = WebImageSupplier.GetAbsoluteWebPath("tasks_widget.png", ProductEntryPoint.ID); break; } case EntityType.Invoice: { var invoice = DaoFactory.InvoiceDao.GetByID(Convert.ToInt32(id)); if (invoice == null || !CRMSecurity.CanAccessTo(invoice)) { continue; } url = String.Format("invoices.aspx?id={0}", id); imageRef = WebImageSupplier.GetAbsoluteWebPath("invoices_widget.png", ProductEntryPoint.ID); break; } default: throw new ArgumentException(); } result.Add(new SearchResultItem { Name = Convert.ToString(row[2]), Description = HtmlUtil.GetText(Convert.ToString(row[3]), 120), URL = !string.IsNullOrEmpty(url) ? String.Concat(PathProvider.BaseAbsolutePath, url) : string.Empty, Date = TenantUtil.DateTimeFromUtc(DateTime.Parse(Convert.ToString(row[7]))), Additional = new Dictionary <String, Object> { { "imageRef", imageRef }, { "relativeInfo", GetPath( Convert.ToInt32(row[4]), Convert.ToInt32(row[5]), (EntityType)Convert.ToInt32(row[6])) }, { "typeInfo", containerType.ToLocalizedString() } } }); } return(result.ToArray()); }
public string AddContactTagToGroup(string entityType, int entityid, string tagName) { if (entityid <= 0 || string.IsNullOrEmpty(tagName)) { throw new ArgumentException(); } var entityTypeObj = ToEntityType(entityType); if (entityTypeObj != EntityType.Company && entityTypeObj != EntityType.Person) { throw new ArgumentException(); } var contactInst = DaoFactory.ContactDao.GetByID(entityid); if (contactInst == null || !CRMSecurity.CanAccessTo(contactInst)) { throw new ItemNotFoundException(); } if (contactInst is Person && entityTypeObj == EntityType.Company) { throw new Exception(CRMErrorsResource.ContactIsNotCompany); } if (contactInst is Company && entityTypeObj == EntityType.Person) { throw new Exception(CRMErrorsResource.ContactIsNotPerson); } var contactIDsToAddTag = new List <int>(); if (contactInst is Company) { contactIDsToAddTag.Add(contactInst.ID); var members = DaoFactory.ContactDao.GetMembersIDsAndShareType(contactInst.ID); foreach (var m in members) { if (CRMSecurity.CanAccessTo(m.Key, EntityType.Person, m.Value, 0)) { contactIDsToAddTag.Add(m.Key); } } } else { var CompanyID = ((Person)contactInst).CompanyID; if (CompanyID != 0) { var cnt = DaoFactory.ContactDao.GetByID(CompanyID); if (cnt != null && cnt is Company && CRMSecurity.CanAccessTo(cnt)) { contactIDsToAddTag.Add(CompanyID); var members = DaoFactory.ContactDao.GetMembersIDsAndShareType(CompanyID); foreach (var m in members) { if (CRMSecurity.CanAccessTo(m.Key, EntityType.Person, m.Value, 0)) { contactIDsToAddTag.Add(m.Key); } } } else { contactIDsToAddTag.Add(contactInst.ID); } } else { contactIDsToAddTag.Add(contactInst.ID); } } DaoFactory.TagDao.AddTagToContacts(contactIDsToAddTag.ToArray(), tagName); var entityTitle = contactInst.GetTitle(); var messageActions = GetTagCreatedGroupAction(entityTypeObj); foreach (var messageAction in messageActions) { MessageService.Send(Request, messageAction, MessageTarget.Create(contactInst.ID), entityTitle, tagName); } return(tagName); }
public OpportunityWrapper UpdateDeal( int opportunityid, int contactid, IEnumerable <int> members, string title, string description, Guid responsibleid, BidType bidType, decimal bidValue, string bidCurrencyAbbr, int perPeriodValue, int stageid, int successProbability, ApiDateTime actualCloseDate, ApiDateTime expectedCloseDate, IEnumerable <ItemKeyValuePair <int, string> > customFieldList, bool isPrivate, IEnumerable <Guid> accessList, bool isNotify) { var deal = DaoFactory.DealDao.GetByID(opportunityid); if (deal == null) { throw new ItemNotFoundException(); } deal.Title = title; deal.Description = description; deal.ResponsibleID = responsibleid; deal.BidType = bidType; deal.BidValue = bidValue; deal.PerPeriodValue = perPeriodValue; deal.DealMilestoneID = stageid; deal.DealMilestoneProbability = successProbability < 0 ? 0 : (successProbability > 100 ? 100 : successProbability); deal.ContactID = contactid; deal.ActualCloseDate = actualCloseDate; deal.ExpectedCloseDate = expectedCloseDate; deal.BidCurrency = !String.IsNullOrEmpty(bidCurrencyAbbr) ? bidCurrencyAbbr.ToUpper() : null; CRMSecurity.DemandCreateOrUpdate(deal); DaoFactory.DealDao.EditDeal(deal); deal = DaoFactory.DealDao.GetByID(opportunityid); var membersList = members != null?members.ToList() : new List <int>(); if (membersList.Any()) { var contacts = DaoFactory.ContactDao.GetContacts(membersList.ToArray()).Where(CRMSecurity.CanAccessTo).ToList(); membersList = contacts.Select(m => m.ID).ToList(); DaoFactory.DealDao.SetMembers(deal.ID, membersList.ToArray()); } if (CRMSecurity.IsAdmin || deal.CreateBy == SecurityContext.CurrentAccount.ID) { SetAccessToDeal(deal, isPrivate, accessList, isNotify, false); } if (customFieldList != null) { var existingCustomFieldList = DaoFactory.CustomFieldDao.GetFieldsDescription(EntityType.Opportunity).Select(fd => fd.ID).ToList(); foreach (var field in customFieldList) { if (string.IsNullOrEmpty(field.Value) || !existingCustomFieldList.Contains(field.Key)) { continue; } DaoFactory.CustomFieldDao.SetFieldValue(EntityType.Opportunity, deal.ID, field.Key, field.Value); } } return(ToOpportunityWrapper(deal)); }
public string DeleteContactTagFromGroup(string entityType, int entityid, string tagName) { if (entityid <= 0 || string.IsNullOrEmpty(tagName)) { throw new ArgumentException(); } var entityTypeObj = ToEntityType(entityType); if (entityTypeObj != EntityType.Company && entityTypeObj != EntityType.Person) { throw new ArgumentException(); } var contactInst = DaoFactory.ContactDao.GetByID(entityid); if (contactInst == null) { throw new ItemNotFoundException(); } if (contactInst is Person && entityTypeObj == EntityType.Company) { throw new Exception(CRMErrorsResource.ContactIsNotCompany); } if (contactInst is Company && entityTypeObj == EntityType.Person) { throw new Exception(CRMErrorsResource.ContactIsNotPerson); } var contactIDsForDeleteTag = new List <int>(); if (contactInst is Company) { contactIDsForDeleteTag.Add(contactInst.ID); var members = DaoFactory.ContactDao.GetMembersIDsAndShareType(contactInst.ID); foreach (var m in members) { if (CRMSecurity.CanAccessTo(m.Key, EntityType.Person, m.Value, 0)) { contactIDsForDeleteTag.Add(m.Key); } } } else { var CompanyID = ((Person)contactInst).CompanyID; if (CompanyID != 0) { var cnt = DaoFactory.ContactDao.GetByID(CompanyID); if (cnt != null && cnt is Company && CRMSecurity.CanAccessTo(cnt)) { contactIDsForDeleteTag.Add(CompanyID); var members = DaoFactory.ContactDao.GetMembersIDsAndShareType(CompanyID); foreach (var m in members) { if (CRMSecurity.CanAccessTo(m.Key, EntityType.Person, m.Value, 0)) { contactIDsForDeleteTag.Add(m.Key); } } } else { contactIDsForDeleteTag.Add(contactInst.ID); } } else { contactIDsForDeleteTag.Add(contactInst.ID); } } DaoFactory.TagDao.DeleteTagFromContacts(contactIDsForDeleteTag.ToArray(), tagName); return(tagName); }
private IEnumerable <OpportunityWrapper> ToListOpportunityWrapper(ICollection <Deal> deals) { if (deals == null || deals.Count == 0) { return(new List <OpportunityWrapper>()); } var result = new List <OpportunityWrapper>(); var contactIDs = new List <int>(); var dealIDs = new List <int>(); var dealMilestoneIDs = new List <int>(); foreach (var deal in deals) { contactIDs.Add(deal.ContactID); dealIDs.Add(deal.ID); dealMilestoneIDs.Add(deal.DealMilestoneID); } dealMilestoneIDs = dealMilestoneIDs.Distinct().ToList(); var contacts = new Dictionary <int, ContactBaseWrapper>(); var customFields = DaoFactory.CustomFieldDao.GetEnityFields(EntityType.Opportunity, dealIDs.ToArray()) .GroupBy(item => item.EntityID) .ToDictionary(item => item.Key, item => item.Select(ToCustomFieldBaseWrapper)); var dealMilestones = DaoFactory.DealMilestoneDao.GetAll(dealMilestoneIDs.ToArray()) .ToDictionary(item => item.ID, item => new DealMilestoneBaseWrapper(item)); var dealMembers = DaoFactory.DealDao.GetMembers(dealIDs.ToArray()); foreach (var value in dealMembers.Values) { contactIDs.AddRange(value); } contactIDs = contactIDs.Distinct().ToList(); if (contactIDs.Count > 0) { DaoFactory.ContactDao.GetContacts(contactIDs.ToArray()).ForEach(item => { if (item == null) { return; } contacts.Add(item.ID, ToContactBaseWrapper(item)); }); } foreach (var deal in deals) { var dealWrapper = new OpportunityWrapper(deal); if (contacts.ContainsKey(deal.ContactID)) { dealWrapper.Contact = contacts[deal.ContactID]; } dealWrapper.CustomFields = customFields.ContainsKey(deal.ID) ? customFields[deal.ID] : new List <CustomFieldBaseWrapper>(); dealWrapper.Members = dealMembers.ContainsKey(dealWrapper.ID) ? dealMembers[dealWrapper.ID].Where(contacts.ContainsKey).Select(item => contacts[item]) : new List <ContactBaseWrapper>(); if (dealMilestones.ContainsKey(deal.DealMilestoneID)) { dealWrapper.Stage = dealMilestones[deal.DealMilestoneID]; } dealWrapper.IsPrivate = CRMSecurity.IsPrivate(deal); if (dealWrapper.IsPrivate) { dealWrapper.AccessList = CRMSecurity.GetAccessSubjectTo(deal).Select(item => EmployeeWraper.Get(item.Key)).ToItemList(); } if (!string.IsNullOrEmpty(deal.BidCurrency)) { dealWrapper.BidCurrency = ToCurrencyInfoWrapper(CurrencyProvider.Get(deal.BidCurrency)); } result.Add(dealWrapper); } return(result); }
protected void SaveOrUpdateContact(object sender, CommandEventArgs e) { Contact contact; var typeAddedContact = Request["typeAddedContact"]; var companyID = 0; if (!String.IsNullOrEmpty(Request["baseInfo_compID"])) { companyID = Convert.ToInt32(Request["baseInfo_compID"]); } else if (!String.IsNullOrEmpty(Request["baseInfo_compName"])) { var peopleCompany = new Company { CompanyName = Request["baseInfo_compName"].Trim() }; peopleCompany.ID = Global.DaoFactory.GetContactDao().SaveContact(peopleCompany); CRMSecurity.MakePublic(peopleCompany); companyID = peopleCompany.ID; } if (typeAddedContact.Equals("people")) { contact = new Person { FirstName = Request["baseInfo_firstName"].Trim(), LastName = Request["baseInfo_lastName"].Trim(), JobTitle = Request["baseInfo_personPosition"].Trim(), CompanyID = companyID }; } else { contact = new Company { CompanyName = Request["baseInfo_companyName"].Trim() }; } if (!String.IsNullOrEmpty(Request["baseInfo_contactOverview"])) { contact.About = Request["baseInfo_contactOverview"].Trim(); } Boolean isSharedContact; if (bool.TryParse(Request["isPublicContact"], out isSharedContact)) { contact.IsShared = isSharedContact; } contact.ContactTypeID = Convert.ToInt32(Request["baseInfo_contactType"]); if (TargetContact != null) { contact.ID = TargetContact.ID; contact.StatusID = TargetContact.StatusID; Global.DaoFactory.GetContactDao().UpdateContact(contact); contact = Global.DaoFactory.GetContactDao().GetByID(contact.ID); } else { contact.ID = Global.DaoFactory.GetContactDao().SaveContact(contact); contact = Global.DaoFactory.GetContactDao().GetByID(contact.ID); } SetContactManager(contact); if (contact is Company) { int[] assignedContactsIDs = null; if (!String.IsNullOrEmpty(Request["baseInfo_assignedContactsIDs"])) { assignedContactsIDs = Request["baseInfo_assignedContactsIDs"].Split(',').Select(item => Convert.ToInt32(item)).ToArray(); } Global.DaoFactory.GetContactDao().SetMembers(contact.ID, assignedContactsIDs); } var assignedTags = Request["baseInfo_assignedTags"]; if (assignedTags != null) { var oldTagList = Global.DaoFactory.GetTagDao().GetEntityTags(EntityType.Contact, contact.ID); foreach (var tag in oldTagList) { Global.DaoFactory.GetTagDao().DeleteTagFromEntity(EntityType.Contact, contact.ID, tag); } if (assignedTags != string.Empty) { var tagListInfo = JObject.Parse(assignedTags)["tagListInfo"].ToArray(); var newTagList = tagListInfo.Select(t => t.ToString()).ToArray(); Global.DaoFactory.GetTagDao().SetTagToEntity(EntityType.Contact, contact.ID, newTagList); } } var contactInfos = new List <ContactInfo>(); var addressList = new Dictionary <int, ContactInfo>(); var addressTemplate = new JObject(); foreach (String addressPartName in Enum.GetNames(typeof(AddressPart))) { addressTemplate.Add(addressPartName.ToLower(), ""); } var addressTemplateStr = addressTemplate.ToString(); foreach (var item in Request.Form.AllKeys) { if (item.StartsWith("customField_")) { int fieldID = Convert.ToInt32(item.Split('_')[1]); String fieldValue = Request.Form[item].Trim(); if (contact is Person) { Global.DaoFactory.GetCustomFieldDao().SetFieldValue(EntityType.Person, contact.ID, fieldID, fieldValue); } else { Global.DaoFactory.GetCustomFieldDao().SetFieldValue(EntityType.Company, contact.ID, fieldID, fieldValue); } } else if (item.StartsWith("contactInfo_")) { var nameParts = item.Split('_').Skip(1).ToList(); var contactInfoType = (ContactInfoType)Enum.Parse(typeof(ContactInfoType), nameParts[0]); var category = Convert.ToInt32(nameParts[2]); if (contactInfoType == ContactInfoType.Address) { var index = Convert.ToInt32(nameParts[1]); var addressPart = (AddressPart)Enum.Parse(typeof(AddressPart), nameParts[3]); var isPrimaryAddress = Convert.ToInt32(nameParts[4]) == 1; var dataValues = Request.Form.GetValues(item).Select(n => n.Trim()).ToList(); if (!addressList.ContainsKey(index)) { var newAddress = new ContactInfo { Category = category, InfoType = contactInfoType, Data = addressTemplateStr, IsPrimary = isPrimaryAddress, ContactID = contact.ID }; addressList.Add(index, newAddress); } foreach (var data in dataValues) { var addressParts = JObject.Parse(addressList[index].Data); addressParts[addressPart.ToString().ToLower()] = data; addressList[index].Data = addressParts.ToString(); } continue; } var isPrimary = Convert.ToInt32(nameParts[3]) == 1; if (Request.Form.GetValues(item) != null) { var dataValues = Request.Form.GetValues(item).Where(n => !string.IsNullOrEmpty(n.Trim())).ToList(); contactInfos.AddRange(dataValues.Select(dataValue => new ContactInfo { Category = category, InfoType = contactInfoType, Data = dataValue.Trim(), IsPrimary = isPrimary, ContactID = contact.ID })); } } } if (addressList.Count > 0) { contactInfos.AddRange(addressList.Values.ToList()); } Global.DaoFactory.GetContactInfoDao().DeleteByContact(contact.ID); Global.DaoFactory.GetContactInfoDao().SaveList(contactInfos); var emails = contactInfos .Where(item => item.InfoType == ContactInfoType.Email) .Select(item => item.Data) .ToList(); if (emails.Count > 0) { var userIds = CRMSecurity.GetAccessSubjectTo(contact).Keys.ToList(); Global.DaoFactory.GetContactInfoDao().UpdateMailAggregator(emails, userIds); } var photoPath = Request["uploadPhotoPath"]; if (!String.IsNullOrEmpty(photoPath)) { if (photoPath != "null") { if (photoPath.StartsWith(PathProvider.BaseAbsolutePath)) { var tmpDirName = photoPath.Substring(0, photoPath.LastIndexOf('/')); ContactPhotoManager.TryUploadPhotoFromTmp(contact.ID, TargetContact == null, tmpDirName); } else { ContactPhotoManager.UploadPhoto(photoPath, contact.ID); } } } else if (TargetContact != null) { ContactPhotoManager.DeletePhoto(TargetContact.ID); } Response.Redirect(String.Compare(e.CommandArgument.ToString(), "0", true) == 0 ? String.Format("default.aspx?id={0}{1}", contact.ID, contact is Company ? "" : String.Format("&{0}=people", UrlConstant.Type)) : String.Format("default.aspx?action=manage{0}", contact is Company ? "" : String.Format("&{0}=people", UrlConstant.Type))); }
protected void SaveOrUpdateDeal(Object sender, CommandEventArgs e) { try { using (var scope = DIHelper.Resolve()) { var dao = scope.Resolve <DaoFactory>(); int dealID; var _isPrivate = false; var _selectedUsersWithoutCurUsr = new List <Guid>(); #region BaseInfo var deal = new Deal { Title = Request["nameDeal"], Description = Request["descriptionDeal"], DealMilestoneID = Convert.ToInt32(Request["dealMilestone"]) }; int contactID; if (int.TryParse(Request["selectedContactID"], out contactID)) { deal.ContactID = contactID; } int probability; if (int.TryParse(Request["probability"], out probability)) { deal.DealMilestoneProbability = probability; } if (deal.DealMilestoneProbability < 0) { deal.DealMilestoneProbability = 0; } if (deal.DealMilestoneProbability > 100) { deal.DealMilestoneProbability = 100; } deal.BidCurrency = Request["bidCurrency"]; if (String.IsNullOrEmpty(deal.BidCurrency)) { deal.BidCurrency = Global.TenantSettings.DefaultCurrency.Abbreviation; } else { deal.BidCurrency = deal.BidCurrency.ToUpper(); } if (!String.IsNullOrEmpty(Request["bidValue"])) { decimal bidValue; if (!decimal.TryParse(Request["bidValue"], out bidValue)) { bidValue = 0; } deal.BidValue = bidValue; deal.BidType = (BidType)Enum.Parse(typeof(BidType), Request["bidType"]); if (deal.BidType != BidType.FixedBid) { int perPeriodValue; if (int.TryParse(Request["perPeriodValue"], out perPeriodValue)) { deal.PerPeriodValue = perPeriodValue; } } } else { deal.BidValue = 0; deal.BidType = BidType.FixedBid; } DateTime expectedCloseDate; if (!DateTime.TryParse(Request["expectedCloseDate"], out expectedCloseDate)) { expectedCloseDate = DateTime.MinValue; } deal.ExpectedCloseDate = expectedCloseDate; deal.ResponsibleID = new Guid(Request["responsibleID"]); #endregion #region Validation CRMSecurity.DemandCreateOrUpdate(deal); if (HavePermission) { var CurrentAccountID = SecurityContext.CurrentAccount.ID; bool value; if (bool.TryParse(Request.Form["isPrivateDeal"], out value)) { _isPrivate = value; } if (_isPrivate) { _selectedUsersWithoutCurUsr = Request.Form["selectedPrivateUsers"] .Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries) .Select(item => new Guid(item)).Where(i => i != CurrentAccountID).Distinct().ToList(); foreach (var uID in _selectedUsersWithoutCurUsr) { var usr = CoreContext.UserManager.GetUsers(uID); if (usr.IsVisitor()) { throw new ArgumentException(); } } if (deal.ResponsibleID != CurrentAccountID) { _selectedUsersWithoutCurUsr.Add(deal.ResponsibleID); var responsible = CoreContext.UserManager.GetUsers(deal.ResponsibleID); if (responsible.IsVisitor()) { throw new ArgumentException(CRMErrorsResource.ResponsibleCannotBeVisitor); } } } } #endregion var dealMilestone = dao.DealMilestoneDao.GetByID(deal.DealMilestoneID); if (TargetDeal == null) { if (dealMilestone.Status != DealMilestoneStatus.Open) { deal.ActualCloseDate = TenantUtil.DateTimeNow(); } dealID = dao.DealDao.CreateNewDeal(deal); deal.ID = dealID; deal.CreateBy = SecurityContext.CurrentAccount.ID; deal.CreateOn = TenantUtil.DateTimeNow(); deal = dao.DealDao.GetByID(dealID); SetPermission(deal, _isPrivate, _selectedUsersWithoutCurUsr); if (deal.ResponsibleID != Guid.Empty && deal.ResponsibleID != SecurityContext.CurrentAccount.ID) { NotifyClient.Instance.SendAboutResponsibleForOpportunity(deal); } MessageService.Send(HttpContext.Current.Request, MessageAction.OpportunityCreated, MessageTarget.Create(deal.ID), deal.Title); } else { dealID = TargetDeal.ID; deal.ID = TargetDeal.ID; deal.ActualCloseDate = TargetDeal.ActualCloseDate; if (TargetDeal.ResponsibleID != Guid.Empty && TargetDeal.ResponsibleID != deal.ResponsibleID) { NotifyClient.Instance.SendAboutResponsibleForOpportunity(deal); } if (TargetDeal.DealMilestoneID != deal.DealMilestoneID) { deal.ActualCloseDate = dealMilestone.Status != DealMilestoneStatus.Open ? TenantUtil.DateTimeNow() : DateTime.MinValue; } dao.DealDao.EditDeal(deal); deal = dao.DealDao.GetByID(dealID); SetPermission(deal, _isPrivate, _selectedUsersWithoutCurUsr); MessageService.Send(HttpContext.Current.Request, MessageAction.OpportunityUpdated, MessageTarget.Create(deal.ID), deal.Title); } #region Members var dealMembers = !String.IsNullOrEmpty(Request["selectedMembersID"]) ? Request["selectedMembersID"].Split(new[] { ',' }).Select( id => Convert.ToInt32(id)).Where(id => id != deal.ContactID).ToList() : new List <int>(); var dealMembersContacts = dao.ContactDao.GetContacts(dealMembers.ToArray()).Where(CRMSecurity.CanAccessTo).ToList(); dealMembers = dealMembersContacts.Select(m => m.ID).ToList(); if (deal.ContactID > 0) { dealMembers.Add(deal.ContactID); } dao.DealDao.SetMembers(dealID, dealMembers.ToArray()); #endregion #region CustomFields foreach (var customField in Request.Form.AllKeys) { if (!customField.StartsWith("customField_")) { continue; } var fieldID = Convert.ToInt32(customField.Split('_')[1]); var fieldValue = Request.Form[customField]; if (String.IsNullOrEmpty(fieldValue) && TargetDeal == null) { continue; } dao.CustomFieldDao.SetFieldValue(EntityType.Opportunity, dealID, fieldID, fieldValue); } #endregion string redirectUrl; if (TargetDeal == null && UrlParameters.ContactID != 0) { redirectUrl = string.Format( e.CommandArgument.ToString() == "1" ? "deals.aspx?action=manage&contactID={0}" : "default.aspx?id={0}#deals", UrlParameters.ContactID); } else { redirectUrl = e.CommandArgument.ToString() == "1" ? "deals.aspx?action=manage" : string.Format("deals.aspx?id={0}", dealID); } Response.Redirect(redirectUrl, false); Context.ApplicationInstance.CompleteRequest(); } } catch (Exception ex) { log4net.LogManager.GetLogger("ASC.CRM").Error(ex); var cookie = HttpContext.Current.Request.Cookies.Get(ErrorCookieKey); if (cookie == null) { cookie = new HttpCookie(ErrorCookieKey) { Value = ex.Message }; HttpContext.Current.Response.Cookies.Add(cookie); } } }
private void ImportContactsData() { using (var CSVFileStream = _dataStore.GetReadStream("temp", _CSVFileURI)) using (CsvReader csv = ImportFromCSV.CreateCsvReaderInstance(CSVFileStream, _importSettings)) { int currentIndex = 0; var personFakeIdCompanyNameHash = new Dictionary <int, String>(); var contactDao = _daoFactory.GetContactDao(); var contactInfoDao = _daoFactory.GetContactInfoDao(); var customFieldDao = _daoFactory.GetCustomFieldDao(); var tagDao = _daoFactory.GetTagDao(); var findedContacts = new Dictionary <int, Contact>(); var findedTags = new Dictionary <int, List <String> >(); var findedCustomField = new List <CustomField>(); var findedContactInfos = new List <ContactInfo>(); while (csv.ReadNextRecord()) { _columns = csv.GetCurrentRowFields(false); Contact contact = null; #region Common data if (!_CommonData(currentIndex, ref contact, ref personFakeIdCompanyNameHash)) { continue; } findedContacts.Add(contact.ID, contact); #endregion #region Read tags _ReadTags(ref findedTags, contact); #endregion #region Custom fields Y contact infos var primaryFields = new List <int>(); foreach (JProperty jToken in _importSettings.ColumnMapping.Children()) { var propertyValue = GetPropertyValue(jToken.Name); if (String.IsNullOrEmpty(propertyValue)) { continue; } if (jToken.Name.StartsWith("customField_")) { _ReadCustomField(jToken, propertyValue, contact, ref findedCustomField, customFieldDao); } else if (jToken.Name.StartsWith("contactInfo_")) { var addressTemplate = new JObject(); foreach (String addressPartName in Enum.GetNames(typeof(AddressPart))) { addressTemplate.Add(addressPartName.ToLower(), ""); } var addressTemplateStr = addressTemplate.ToString(); _ReadContactInfo(jToken, propertyValue, contact, ref findedContactInfos, ref primaryFields, addressTemplateStr); } } #endregion if (currentIndex + 1 > ImportFromCSV.MaxRoxCount) { break; } currentIndex++; } Percentage = 37.5; if (ImportDataCache.CheckCancelFlag(EntityType.Contact)) { ImportDataCache.ResetAll(EntityType.Contact); throw new OperationCanceledException(); } ImportDataCache.Insert(EntityType.Contact, (ImportDataOperation)Clone()); #region Processing duplicate rule _DuplicateRecordRuleProcess(ref findedContacts, ref personFakeIdCompanyNameHash, ref findedContactInfos, ref findedCustomField, ref findedTags); #endregion Percentage += 12.5; if (ImportDataCache.CheckCancelFlag(EntityType.Contact)) { ImportDataCache.ResetAll(EntityType.Contact); throw new OperationCanceledException(); } ImportDataCache.Insert(EntityType.Contact, (ImportDataOperation)Clone()); var findedCompanies = findedContacts.Where(x => x.Value is Company).ToDictionary(x => x.Key, y => y.Value); var findedPeoples = findedContacts.Where(x => x.Value is Person).ToDictionary(x => x.Key, y => y.Value); var fakeRealContactIdHash = contactDao.SaveContactList(findedCompanies.Values.ToList()) .ToDictionary(item => item.Key, item => item.Value); var companyNameRealIdHash = new Dictionary <String, int>(); foreach (Company item in findedCompanies.Values) { if (companyNameRealIdHash.ContainsKey(item.CompanyName)) { continue; } companyNameRealIdHash.Add(item.CompanyName, item.ID); } foreach (var item in personFakeIdCompanyNameHash) { var person = (Person)findedPeoples[item.Key]; if (companyNameRealIdHash.ContainsKey(item.Value)) { person.CompanyID = companyNameRealIdHash[item.Value]; } else { var findedCompany = contactDao.GetContactsByName(item.Value, true).FirstOrDefault(); // Why ??? if (findedCompany == null) { #region create COMPANY for person in csv findedCompany = new Company { CompanyName = item.Value, ShareType = _importSettings.ShareType }; findedCompany.ID = contactDao.SaveContact(findedCompany); person.CompanyID = findedCompany.ID; CRMSecurity.SetAccessTo(findedCompany, _importSettings.ContactManagers); if (_importSettings.Tags.Count != 0) { tagDao.SetTagToEntity(EntityType.Contact, person.CompanyID, _importSettings.Tags.ToArray()); } #endregion } else { person.CompanyID = findedCompany.ID; } companyNameRealIdHash.Add(item.Value, person.CompanyID); } } fakeRealContactIdHash = fakeRealContactIdHash.Union(contactDao.SaveContactList(findedPeoples.Values.ToList())) .ToDictionary(item => item.Key, item => item.Value); Percentage += 12.5; if (ImportDataCache.CheckCancelFlag(EntityType.Contact)) { ImportDataCache.ResetAll(EntityType.Contact); throw new OperationCanceledException(); } ImportDataCache.Insert(EntityType.Contact, (ImportDataOperation)Clone()); #region Save contact infos findedContactInfos.ForEach(item => item.ContactID = fakeRealContactIdHash[item.ContactID]); contactInfoDao.SaveList(findedContactInfos); #endregion Percentage += 12.5; if (ImportDataCache.CheckCancelFlag(EntityType.Contact)) { ImportDataCache.ResetAll(EntityType.Contact); throw new OperationCanceledException(); } ImportDataCache.Insert(EntityType.Contact, (ImportDataOperation)Clone()); #region Save custom fields findedCustomField.ForEach(item => item.EntityID = fakeRealContactIdHash[item.EntityID]); customFieldDao.SaveList(findedCustomField); #endregion Percentage += 12.5; if (ImportDataCache.CheckCancelFlag(EntityType.Contact)) { ImportDataCache.ResetAll(EntityType.Contact); throw new OperationCanceledException(); } ImportDataCache.Insert(EntityType.Contact, (ImportDataOperation)Clone()); #region Save tags foreach (var findedTagKey in findedTags.Keys) { tagDao.SetTagToEntity(EntityType.Contact, fakeRealContactIdHash[findedTagKey], findedTags[findedTagKey].ToArray()); } #endregion #region CRMSecurity set findedContacts.Values.ToList().ForEach(contact => CRMSecurity.SetAccessTo(contact, _importSettings.ContactManagers)); #endregion Percentage += 12.5; if (ImportDataCache.CheckCancelFlag(EntityType.Contact)) { ImportDataCache.ResetAll(EntityType.Contact); throw new OperationCanceledException(); } ImportDataCache.Insert(EntityType.Contact, (ImportDataOperation)Clone()); } Complete(); }
public RelationshipEventWrapper AddHistoryTo( string entityType, int entityId, int contactId, string content, int categoryId, ApiDateTime created, IEnumerable <int> fileId, IEnumerable <Guid> notifyUserList) { if (!string.IsNullOrEmpty(entityType) && !( string.Compare(entityType, "opportunity", StringComparison.OrdinalIgnoreCase) == 0 || string.Compare(entityType, "case", StringComparison.OrdinalIgnoreCase) == 0) ) { throw new ArgumentException(); } var entityTypeObj = ToEntityType(entityType); var entityTitle = ""; if (contactId > 0) { var contact = DaoFactory.ContactDao.GetByID(contactId); if (contact == null || !CRMSecurity.CanAccessTo(contact)) { throw new ArgumentException(); } entityTitle = contact.GetTitle(); } if (entityTypeObj == EntityType.Case) { var cases = DaoFactory.CasesDao.GetByID(entityId); if (cases == null || !CRMSecurity.CanAccessTo(cases)) { throw new ArgumentException(); } if (contactId <= 0) { entityTitle = cases.Title; } } if (entityTypeObj == EntityType.Opportunity) { var deal = DaoFactory.DealDao.GetByID(entityId); if (deal == null || !CRMSecurity.CanAccessTo(deal)) { throw new ArgumentException(); } if (contactId <= 0) { entityTitle = deal.Title; } } var relationshipEvent = new RelationshipEvent { CategoryID = categoryId, EntityType = entityTypeObj, EntityID = entityId, Content = content, ContactID = contactId, CreateOn = created, CreateBy = Core.SecurityContext.CurrentAccount.ID }; var category = DaoFactory.ListItemDao.GetByID(categoryId); if (category == null) { throw new ArgumentException(); } var item = DaoFactory.RelationshipEventDao.CreateItem(relationshipEvent); notifyUserList = notifyUserList != null?notifyUserList.ToList() : new List <Guid>(); var needNotify = notifyUserList.Any(); var fileListInfoHashtable = new Hashtable(); if (fileId != null) { var fileIds = fileId.ToList(); var files = FilesDaoFactory.GetFileDao().GetFiles(fileIds.Cast <object>().ToArray()); if (needNotify) { foreach (var file in files) { var extension = Path.GetExtension(file.Title); if (extension == null) { continue; } var fileInfo = string.Format("{0} ({1})", file.Title, extension.ToUpper()); if (!fileListInfoHashtable.ContainsKey(fileInfo)) { fileListInfoHashtable.Add(fileInfo, file.DownloadUrl); } else { fileInfo = string.Format("{0} ({1}, {2})", file.Title, extension.ToUpper(), file.UniqID); fileListInfoHashtable.Add(fileInfo, file.DownloadUrl); } } } DaoFactory.RelationshipEventDao.AttachFiles(item.ID, fileIds.ToArray()); if (files.Any()) { var fileAttachAction = GetFilesAttachAction(entityTypeObj, contactId); MessageService.Send(Request, fileAttachAction, MessageTarget.Create(item.ID), entityTitle, files.Select(x => x.Title)); } } if (needNotify) { NotifyClient.Instance.SendAboutAddRelationshipEventAdd(item, fileListInfoHashtable, DaoFactory, notifyUserList.ToArray()); } var wrapper = ToRelationshipEventWrapper(item); var historyCreatedAction = GetHistoryCreatedAction(entityTypeObj, contactId); MessageService.Send(Request, historyCreatedAction, MessageTarget.Create(item.ID), entityTitle, category.Title); return(wrapper); }
public override bool VisibleFor(Feed feed, object data, Guid userId) { return(base.VisibleFor(feed, data, userId) && CRMSecurity.CanAccessTo((Contact)data)); }
public IEnumerable <RelationshipEventWrapper> GetHistory( string entityType, int entityId, int categoryId, Guid createBy, ApiDateTime fromDate, ApiDateTime toDate) { var entityTypeObj = ToEntityType(entityType); switch (entityTypeObj) { case EntityType.Contact: var contact = DaoFactory.ContactDao.GetByID(entityId); if (contact == null || !CRMSecurity.CanAccessTo(contact)) { throw new ItemNotFoundException(); } break; case EntityType.Case: var cases = DaoFactory.CasesDao.GetByID(entityId); if (cases == null || !CRMSecurity.CanAccessTo(cases)) { throw new ItemNotFoundException(); } break; case EntityType.Opportunity: var deal = DaoFactory.DealDao.GetByID(entityId); if (deal == null || !CRMSecurity.CanAccessTo(deal)) { throw new ItemNotFoundException(); } break; default: if (entityId != 0) { throw new ArgumentException(); } break; } RelationshipEventByType eventByType; IEnumerable <RelationshipEventWrapper> result; OrderBy eventOrderBy; if (Web.CRM.Classes.EnumExtension.TryParse(_context.SortBy, true, out eventByType)) { eventOrderBy = new OrderBy(eventByType, !_context.SortDescending); } else if (string.IsNullOrEmpty(_context.SortBy)) { eventOrderBy = new OrderBy(RelationshipEventByType.Created, false); } else { eventOrderBy = null; } if (eventOrderBy != null) { result = ToListRelationshipEventWrapper(DaoFactory.RelationshipEventDao.GetItems( _context.FilterValue, entityTypeObj, entityId, createBy, categoryId, fromDate, toDate, (int)_context.StartIndex, (int)_context.Count, eventOrderBy)); _context.SetDataPaginated(); _context.SetDataFiltered(); _context.SetDataSorted(); } else { result = ToListRelationshipEventWrapper(DaoFactory.RelationshipEventDao.GetItems( _context.FilterValue, entityTypeObj, entityId, createBy, categoryId, fromDate, toDate, 0, 0, null)); } return(result.ToSmartList()); }
public int GetTasksCount( String searchText, Guid responsibleId, int categoryId, bool?isClosed, DateTime fromDate, DateTime toDate, EntityType entityType, int entityId) { int result = 0; LogManager.GetLogger("ASC.CRM").DebugFormat("Starting GetTasksCount: {0}", DateTime.Now.ToString()); var cacheKey = TenantID.ToString(CultureInfo.InvariantCulture) + "tasks" + SecurityContext.CurrentAccount.ID.ToString() + searchText + responsibleId + categoryId + fromDate.ToString(CultureInfo.InvariantCulture) + toDate.ToString(CultureInfo.InvariantCulture) + (int)entityType + entityId; if (!String.IsNullOrEmpty(_cache.Get <String>(cacheKey))) { LogManager.GetLogger("ASC.CRM").DebugFormat("End GetTasksCount: {0}. From cache", DateTime.Now.ToString()); return(Convert.ToInt32(_cache.Get <String>(cacheKey))); } if (!String.IsNullOrEmpty(searchText)) { var tasks = GetCrudeTasks(searchText, responsibleId, categoryId, isClosed, fromDate, toDate, entityType, entityId, 0, 0, null); if (CRMSecurity.IsAdmin) { result = tasks.Count(); } else { result = CRMSecurity.FilterRead(tasks).Count(); } } else { if (CRMSecurity.IsAdmin) { var sqlQuery = Query("crm_task tbl_tsk").SelectCount(); sqlQuery = WhereConditional(sqlQuery, "tbl_tsk", responsibleId, categoryId, isClosed, fromDate, toDate, entityType, entityId, 0, 0, null); result = Db.ExecuteScalar <int>(sqlQuery); } else { var taskIds = new List <int>(); var sqlQuery = Query("crm_task tbl_tsk") .Select("tbl_tsk.id") .LeftOuterJoin("crm_contact tbl_ctc", Exp.EqColumns("tbl_tsk.contact_id", "tbl_ctc.id")) .Where(Exp.Or(Exp.Eq("tbl_ctc.is_shared", Exp.Empty), Exp.Gt("tbl_ctc.is_shared", 0))); sqlQuery = WhereConditional(sqlQuery, "tbl_tsk", responsibleId, categoryId, isClosed, fromDate, toDate, entityType, entityId, 0, 0, null); // count tasks without entityId and only open contacts taskIds = Db.ExecuteList(sqlQuery).Select(item => Convert.ToInt32(item[0])).ToList(); LogManager.GetLogger("ASC.CRM").DebugFormat("End GetTasksCount: {0}. count tasks without entityId and only open contacts", DateTime.Now.ToString()); sqlQuery = Query("crm_task tbl_tsk") .Select("tbl_tsk.id") .InnerJoin("crm_contact tbl_ctc", Exp.EqColumns("tbl_tsk.contact_id", "tbl_ctc.id")) .InnerJoin("core_acl tbl_cl", Exp.EqColumns("tbl_ctc.tenant_id", "tbl_cl.tenant") & Exp.Eq("tbl_cl.subject", ASC.Core.SecurityContext.CurrentAccount.ID.ToString()) & Exp.Eq("tbl_cl.action", CRMSecurity._actionRead.ID.ToString()) & Exp.EqColumns("tbl_cl.object", "CONCAT('ASC.CRM.Core.Entities.Company|', tbl_ctc.id)")) .Where(Exp.Eq("tbl_ctc.is_shared", 0)) .Where(Exp.Eq("tbl_ctc.is_company", 1)); sqlQuery = WhereConditional(sqlQuery, "tbl_tsk", responsibleId, categoryId, isClosed, fromDate, toDate, entityType, entityId, 0, 0, null); // count tasks with entityId and only close contacts taskIds.AddRange(Db.ExecuteList(sqlQuery).Select(item => Convert.ToInt32(item[0])).ToList()); LogManager.GetLogger("ASC.CRM").DebugFormat("End GetTasksCount: {0}. count tasks with entityId and only close contacts", DateTime.Now.ToString()); sqlQuery = Query("crm_task tbl_tsk") .Select("tbl_tsk.id") .InnerJoin("crm_contact tbl_ctc", Exp.EqColumns("tbl_tsk.contact_id", "tbl_ctc.id")) .InnerJoin("core_acl tbl_cl", Exp.EqColumns("tbl_ctc.tenant_id", "tbl_cl.tenant") & Exp.Eq("tbl_cl.subject", ASC.Core.SecurityContext.CurrentAccount.ID.ToString()) & Exp.Eq("tbl_cl.action", CRMSecurity._actionRead.ID.ToString()) & Exp.EqColumns("tbl_cl.object", "CONCAT('ASC.CRM.Core.Entities.Person|', tbl_ctc.id)")) .Where(Exp.Eq("tbl_ctc.is_shared", 0)) .Where(Exp.Eq("tbl_ctc.is_company", 0)); sqlQuery = WhereConditional(sqlQuery, "tbl_tsk", responsibleId, categoryId, isClosed, fromDate, toDate, entityType, entityId, 0, 0, null); // count tasks with entityId and only close contacts taskIds.AddRange(Db.ExecuteList(sqlQuery).Select(item => Convert.ToInt32(item[0])).ToList()); LogManager.GetLogger("ASC.CRM").DebugFormat("End GetTasksCount: {0}. count tasks with entityId and only close contacts", DateTime.Now.ToString()); sqlQuery = Query("crm_task tbl_tsk") .Select("tbl_tsk.id") .InnerJoin("core_acl tbl_cl", Exp.EqColumns("tbl_tsk.tenant_id", "tbl_cl.tenant") & Exp.Eq("tbl_cl.subject", ASC.Core.SecurityContext.CurrentAccount.ID.ToString()) & Exp.Eq("tbl_cl.action", CRMSecurity._actionRead.ID.ToString()) & Exp.EqColumns("tbl_cl.object", "CONCAT('ASC.CRM.Core.Entities.Deal|', tbl_tsk.entity_id)")) .Where(!Exp.Eq("tbl_tsk.entity_id", 0) & Exp.Eq("tbl_tsk.entity_type", (int)EntityType.Opportunity) & Exp.Eq("tbl_tsk.contact_id", 0)); sqlQuery = WhereConditional(sqlQuery, "tbl_tsk", responsibleId, categoryId, isClosed, fromDate, toDate, entityType, entityId, 0, 0, null); // count tasks with entityId and without contact taskIds.AddRange(Db.ExecuteList(sqlQuery).Select(item => Convert.ToInt32(item[0])).ToList()); LogManager.GetLogger("ASC.CRM").DebugFormat("End GetTasksCount: {0}. count tasks with entityId and without contact", DateTime.Now.ToString()); sqlQuery = Query("crm_task tbl_tsk") .Select("tbl_tsk.id") .InnerJoin("core_acl tbl_cl", Exp.EqColumns("tbl_tsk.tenant_id", "tbl_cl.tenant") & Exp.Eq("tbl_cl.subject", ASC.Core.SecurityContext.CurrentAccount.ID.ToString()) & Exp.Eq("tbl_cl.action", CRMSecurity._actionRead.ID.ToString()) & Exp.EqColumns("tbl_cl.object", "CONCAT('ASC.CRM.Core.Entities.Cases|', tbl_tsk.entity_id)")) .Where(!Exp.Eq("tbl_tsk.entity_id", 0) & Exp.Eq("tbl_tsk.entity_type", (int)EntityType.Case) & Exp.Eq("tbl_tsk.contact_id", 0)); sqlQuery = WhereConditional(sqlQuery, "tbl_tsk", responsibleId, categoryId, isClosed, fromDate, toDate, entityType, entityId, 0, 0, null); // count tasks with entityId and without contact taskIds.AddRange(Db.ExecuteList(sqlQuery).Select(item => Convert.ToInt32(item[0])).ToList()); result = taskIds.Distinct().Count(); LogManager.GetLogger("ASC.CRM").DebugFormat("End GetTasksCount: {0}. count tasks with entityId and without contact", DateTime.Now.ToString()); LogManager.GetLogger("ASC.CRM").Debug("Finish"); } } if (result > 0) { _cache.Insert(cacheKey, result, TimeSpan.FromMinutes(1)); } return(result); }
protected void Page_Command(Object sender, CommandEventArgs e) { Guid gORDER_ID = CommonTypeConvert.ToGuid(Request["ORDER_ID"]); Guid gQUOTE_ID = CommonTypeConvert.ToGuid(Request["QUOTE_ID"]); Guid gPARENT_ID = CommonTypeConvert.ToGuid(Request["PARENT_ID"]); string sMODULE = String.Empty; string sPARENT_TYPE = String.Empty; string sPARENT_NAME = String.Empty; CommonProcedure.ParentGet(ref gPARENT_ID, ref sMODULE, ref sPARENT_TYPE, ref sPARENT_NAME); if (e.CommandName == "Save") { ValidateEditViewFields(m_sMODULE + ".EditView"); ValidateEditViewFields(m_sMODULE + ".EditAddress"); ValidateEditViewFields(m_sMODULE + ".EditDescription"); if (Page.IsValid) { string sCUSTOM_MODULE = "INVOICES"; DataTable dtCustomFields = CRMCache.FieldsMetaData_Validated(sCUSTOM_MODULE); DataTable dtCustomLineItems = CRMCache.FieldsMetaData_UnvalidatedCustomFields(sCUSTOM_MODULE + "_LINE_ITEMS"); DataRow rowCurrent = null; var dtCurrent = new DataTable(); if (!CommonTypeConvert.IsEmptyGuid(gID)) { string innerSql = ApplicationSQL.SQL["Invoices_EditView_323"].ToString(); var oQuery = new InlineQueryDBManager(); oQuery.CommandText = innerSql; CRMSecurity.Filter(oQuery, m_sMODULE, "edit"); TypeConvert.AppendParameter(oQuery, gID, "ID", false); dtCurrent = oQuery.GetTable(); if (dtCurrent.Rows.Count > 0) { rowCurrent = dtCurrent.Rows[0]; } else { gID = Guid.Empty; } } ctlEditLineItemsView.UpdateTotals(); CommonProcedure.InvoicesUpdate (ref gID , new DynamicControl(this, rowCurrent, "ASSIGNED_USER_ID").ID , new DynamicControl(this, rowCurrent, "NAME").Text , new DynamicControl(this, rowCurrent, "QUOTE_ID").ID , new DynamicControl(this, rowCurrent, "ORDER_ID").ID , new DynamicControl(this, rowCurrent, "OPPORTUNITY_ID").ID , new DynamicControl(this, rowCurrent, "PAYMENT_TERMS").SelectedValue , new DynamicControl(this, rowCurrent, "INVOICE_STAGE").SelectedValue , new DynamicControl(this, rowCurrent, "PURCHASE_ORDER_NUM").Text , new DynamicControl(this, rowCurrent, "DUE_DATE").DateValue , new DynamicControl(ctlEditLineItemsView, rowCurrent, "EXCHANGE_RATE").FloatValue , new DynamicControl(ctlEditLineItemsView, rowCurrent, "CURRENCY_ID").ID , new DynamicControl(ctlEditLineItemsView, rowCurrent, "TAXRATE_ID").ID , new DynamicControl(ctlEditLineItemsView, rowCurrent, "SHIPPER_ID").ID , new DynamicControl(ctlEditLineItemsView, rowCurrent, "SUBTOTAL").DecimalValue , new DynamicControl(ctlEditLineItemsView, rowCurrent, "DISCOUNT").DecimalValue , new DynamicControl(ctlEditLineItemsView, rowCurrent, "SHIPPING").DecimalValue , new DynamicControl(ctlEditLineItemsView, rowCurrent, "TAX").DecimalValue , new DynamicControl(ctlEditLineItemsView, rowCurrent, "TOTAL").DecimalValue , new DynamicControl(ctlEditLineItemsView, rowCurrent, "AMOUNT_DUE").DecimalValue , new DynamicControl(this, rowCurrent, "BILLING_ACCOUNT_ID").ID , new DynamicControl(this, rowCurrent, "BILLING_CONTACT_ID").ID , new DynamicControl(this, rowCurrent, "BILLING_ADDRESS_STREET").Text , new DynamicControl(this, rowCurrent, "BILLING_ADDRESS_CITY").Text , new DynamicControl(this, rowCurrent, "BILLING_ADDRESS_STATE").Text , new DynamicControl(this, rowCurrent, "BILLING_ADDRESS_POSTALCODE").Text , new DynamicControl(this, rowCurrent, "BILLING_ADDRESS_COUNTRY").Text , new DynamicControl(this, rowCurrent, "SHIPPING_ACCOUNT_ID").ID , new DynamicControl(this, rowCurrent, "SHIPPING_CONTACT_ID").ID , new DynamicControl(this, rowCurrent, "SHIPPING_ADDRESS_STREET").Text , new DynamicControl(this, rowCurrent, "SHIPPING_ADDRESS_CITY").Text , new DynamicControl(this, rowCurrent, "SHIPPING_ADDRESS_STATE").Text , new DynamicControl(this, rowCurrent, "SHIPPING_ADDRESS_POSTALCODE").Text , new DynamicControl(this, rowCurrent, "SHIPPING_ADDRESS_COUNTRY").Text , new DynamicControl(this, rowCurrent, "DESCRIPTION").Text , new DynamicControl(this, rowCurrent, "TEAM_ID").ID ); CRMDynamic.UpdateCustomFields(this, gID, sCUSTOM_MODULE, dtCustomFields); DataTable dtLineItems = ctlEditLineItemsView.LineItems; foreach (DataRow row in dtLineItems.Rows) { if (row.RowState == DataRowState.Deleted) { Guid gITEM_ID = CommonTypeConvert.ToGuid(row["ID", DataRowVersion.Original]); if (!CommonTypeConvert.IsEmptyGuid(gITEM_ID)) { CommonProcedure.InvoicesLINE_ITEMS_Delete(gITEM_ID); } } } int nPOSITION = 1; foreach (DataRow row in dtLineItems.Rows) { if (row.RowState != DataRowState.Deleted) { Guid gITEM_ID = CommonTypeConvert.ToGuid(row["ID"]); Guid gLINE_GROUP_ID = CommonTypeConvert.ToGuid(row["LINE_GROUP_ID"]); string sLINE_ITEM_TYPE = CommonTypeConvert.ToString(row["LINE_ITEM_TYPE"]); string sNAME = CommonTypeConvert.ToString(row["NAME"]); string sMFT_PART_NUM = CommonTypeConvert.ToString(row["MFT_PART_NUM"]); string sVENDOR_PART_NUM = CommonTypeConvert.ToString(row["VENDOR_PART_NUM"]); Guid gPRODUCT_TEMPLATE_ID = CommonTypeConvert.ToGuid(row["PRODUCT_TEMPLATE_ID"]); string sTAX_CLASS = CommonTypeConvert.ToString(row["TAX_CLASS"]); int nQUANTITY = CommonTypeConvert.ToInteger(row["QUANTITY"]); Decimal dCOST_PRICE = CommonTypeConvert.ToDecimal(row["COST_PRICE"]); Decimal dLIST_PRICE = CommonTypeConvert.ToDecimal(row["LIST_PRICE"]); Decimal dUNIT_PRICE = CommonTypeConvert.ToDecimal(row["UNIT_PRICE"]); string sDESCRIPTION = CommonTypeConvert.ToString(row["DESCRIPTION"]); if (!CommonTypeConvert.IsEmptyGuid(gPRODUCT_TEMPLATE_ID) || !CommonTypeConvert.IsEmptyString(sNAME)) { CommonProcedure.InvoicesLINE_ITEMS_Update (ref gITEM_ID , gID , gLINE_GROUP_ID , sLINE_ITEM_TYPE , nPOSITION , sNAME , sMFT_PART_NUM , sVENDOR_PART_NUM , gPRODUCT_TEMPLATE_ID , sTAX_CLASS , nQUANTITY , dCOST_PRICE , dLIST_PRICE , dUNIT_PRICE , sDESCRIPTION ); CRMDynamic.UpdateCustomFields(row, gITEM_ID, sCUSTOM_MODULE + "_LINE_ITEMS", dtCustomLineItems); nPOSITION++; } } } CommonProcedure.InvoicesUpdateAmountDue(gID); if (!CommonTypeConvert.IsEmptyGuid(gPARENT_ID)) { Response.Redirect("~/CRM/" + sMODULE + "/view.aspx?ID=" + gPARENT_ID); } else { Response.Redirect("view.aspx?ID=" + gID); } } } else if (e.CommandName == "Cancel") { if (!CommonTypeConvert.IsEmptyGuid(gPARENT_ID)) { Response.Redirect("~/CRM/" + sMODULE + "/view.aspx?ID=" + gPARENT_ID); } else if (!CommonTypeConvert.IsEmptyGuid(gORDER_ID)) { Response.Redirect("~/CRM/Orders/view.aspx?ID=" + gORDER_ID); } else if (!CommonTypeConvert.IsEmptyGuid(gQUOTE_ID)) { Response.Redirect("~/CRM/Quotes/view.aspx?ID=" + gQUOTE_ID); } else if (CommonTypeConvert.IsEmptyGuid(gID)) { Response.Redirect("Index.aspx"); } else { Response.Redirect("view.aspx?ID=" + gID); } } }
private void ImportContactsData(DaoFactory _daoFactory) { var index = 0; var personFakeIdCompanyNameHash = new Dictionary <int, String>(); var contactDao = _daoFactory.ContactDao; var contactInfoDao = _daoFactory.ContactInfoDao; var customFieldDao = _daoFactory.CustomFieldDao; var tagDao = _daoFactory.TagDao; var findedContacts = new Dictionary <int, Contact>(); var findedTags = new Dictionary <int, List <String> >(); var findedCustomField = new List <CustomField>(); var findedContactInfos = new List <ContactInfo>(); #region Read csv using (var CSVFileStream = _dataStore.GetReadStream("temp", _CSVFileURI)) using (CsvReader csv = ImportFromCSV.CreateCsvReaderInstance(CSVFileStream, _importSettings)) { int currentIndex = 0; while (csv.ReadNextRecord()) { _columns = csv.GetCurrentRowFields(false); Contact contact = null; #region Common data if (!_CommonData(currentIndex, _daoFactory, ref contact, ref personFakeIdCompanyNameHash)) { continue; } findedContacts.Add(contact.ID, contact); #endregion #region Read tags _ReadTags(ref findedTags, contact); #endregion #region Custom fields Y contact infos var primaryFields = new List <int>(); foreach (JProperty jToken in _importSettings.ColumnMapping.Children()) { var propertyValue = GetPropertyValue(jToken.Name); if (String.IsNullOrEmpty(propertyValue)) { continue; } if (jToken.Name.StartsWith("customField_")) { _ReadCustomField(jToken, propertyValue, contact, ref findedCustomField, customFieldDao); } else if (jToken.Name.StartsWith("contactInfo_")) { var addressTemplate = new JObject(); foreach (String addressPartName in Enum.GetNames(typeof(AddressPart))) { addressTemplate.Add(addressPartName.ToLower(), ""); } var addressTemplateStr = addressTemplate.ToString(); _ReadContactInfo(jToken, propertyValue, contact, ref findedContactInfos, ref primaryFields, addressTemplateStr); } } #endregion if (currentIndex + 1 > ImportFromCSV.MaxRoxCount) { break; } currentIndex++; } } _log.InfoFormat("ImportContactsData. Reading {0} findedContacts complete", findedContacts.Count); #endregion Percentage = 37.5; #region Check Cancel flag | Insert Operation InCache if (ImportDataCache.CheckCancelFlag(EntityType.Contact)) { ImportDataCache.ResetAll(EntityType.Contact); throw new OperationCanceledException(); } ImportDataCache.Insert(EntityType.Contact, (ImportDataOperation)Clone()); #endregion #region Processing duplicate rule _DuplicateRecordRuleProcess(_daoFactory, ref findedContacts, ref personFakeIdCompanyNameHash, ref findedContactInfos, ref findedCustomField, ref findedTags); _log.Info("ImportContactsData. _DuplicateRecordRuleProcess. End"); if (IsCompleted) { return; } #endregion Percentage += 12.5; #region Check Cancel flag | Insert Operation InCache if (ImportDataCache.CheckCancelFlag(EntityType.Contact)) { ImportDataCache.ResetAll(EntityType.Contact); throw new OperationCanceledException(); } ImportDataCache.Insert(EntityType.Contact, (ImportDataOperation)Clone()); #endregion #region Manipulation for saving Companies for persons + CRMSecurity var findedCompanies = findedContacts.Where(x => x.Value is Company).ToDictionary(x => x.Key, y => y.Value); var findedPeoples = findedContacts.Where(x => x.Value is Person).ToDictionary(x => x.Key, y => y.Value); var fakeRealContactIdHash = new Dictionary <int, int>(); var companyNameRealIdHash = new Dictionary <String, int>(); var findedCompaniesList = findedCompanies.Values.ToList(); if (findedCompaniesList.Count != 0) { index = 0; while (index < findedCompaniesList.Count) { var portion = findedCompaniesList.Skip(index).Take(DaoIterationStep).ToList();// Get next step fakeRealContactIdHash = fakeRealContactIdHash.Union( contactDao.SaveContactList(portion)) .ToDictionary(item => item.Key, item => item.Value); #region CRMSecurity set -by every item- portion.ForEach(ct => CRMSecurity.SetAccessTo(ct, _importSettings.ContactManagers)); #endregion index += DaoIterationStep; if (index > findedCompaniesList.Count) { index = findedCompaniesList.Count; } } } foreach (Company item in findedCompanies.Values) { if (companyNameRealIdHash.ContainsKey(item.CompanyName)) { continue; } companyNameRealIdHash.Add(item.CompanyName, item.ID); } foreach (var item in personFakeIdCompanyNameHash) { var person = (Person)findedPeoples[item.Key]; if (companyNameRealIdHash.ContainsKey(item.Value)) { person.CompanyID = companyNameRealIdHash[item.Value]; } else { var findedCompany = contactDao.GetContactsByName(item.Value, true).FirstOrDefault(); // Why ??? if (findedCompany == null) { #region create COMPANY for person in csv findedCompany = new Company { CompanyName = item.Value, ShareType = _importSettings.ShareType }; findedCompany.ID = contactDao.SaveContact(findedCompany); person.CompanyID = findedCompany.ID; CRMSecurity.SetAccessTo(findedCompany, _importSettings.ContactManagers); if (_importSettings.Tags.Count != 0) { tagDao.SetTagToEntity(EntityType.Contact, person.CompanyID, _importSettings.Tags.ToArray()); } #endregion } else { person.CompanyID = findedCompany.ID; } companyNameRealIdHash.Add(item.Value, person.CompanyID); } } #endregion #region Saving People common data -by portions- + CRMSecurity var findedPeopleList = findedPeoples.Values.ToList(); if (findedPeopleList.Count != 0) { index = 0; while (index < findedPeopleList.Count) { var portion = findedPeopleList.Skip(index).Take(DaoIterationStep).ToList();// Get next step fakeRealContactIdHash = fakeRealContactIdHash.Union( contactDao.SaveContactList(portion)) .ToDictionary(item => item.Key, item => item.Value); #region CRMSecurity set -by every item- portion.ForEach(ct => CRMSecurity.SetAccessTo(ct, _importSettings.ContactManagers)); #endregion index += DaoIterationStep; if (index > findedPeopleList.Count) { index = findedPeopleList.Count; } } } _log.Info("ImportContactsData. Contacts common data saved"); #endregion Percentage += 12.5; #region Check Cancel flag | Insert Operation InCache if (ImportDataCache.CheckCancelFlag(EntityType.Contact)) { ImportDataCache.ResetAll(EntityType.Contact); throw new OperationCanceledException(); } ImportDataCache.Insert(EntityType.Contact, (ImportDataOperation)Clone()); #endregion #region Save contact infos -by portions- if (findedContactInfos.Count != 0) { findedContactInfos.ForEach(item => item.ContactID = fakeRealContactIdHash[item.ContactID]); index = 0; while (index < findedContactInfos.Count) { var portion = findedContactInfos.Skip(index).Take(DaoIterationStep).ToList();// Get next step contactInfoDao.SaveList(portion); index += DaoIterationStep; if (index > findedContactInfos.Count) { index = findedContactInfos.Count; } } } _log.Info("ImportContactsData. Contacts infos saved"); #endregion Percentage += 12.5; #region Check Cancel flag | Insert Operation InCache if (ImportDataCache.CheckCancelFlag(EntityType.Contact)) { ImportDataCache.ResetAll(EntityType.Contact); throw new OperationCanceledException(); } ImportDataCache.Insert(EntityType.Contact, (ImportDataOperation)Clone()); #endregion #region Save custom fields -by portions- if (findedCustomField.Count != 0) { findedCustomField.ForEach(item => item.EntityID = fakeRealContactIdHash[item.EntityID]); index = 0; while (index < findedCustomField.Count) { var portion = findedCustomField.Skip(index).Take(DaoIterationStep).ToList();// Get next step customFieldDao.SaveList(portion); index += DaoIterationStep; if (index > findedCustomField.Count) { index = findedCustomField.Count; } } } _log.Info("ImportContactsData. Custom fields saved"); #endregion Percentage += 12.5; #region Check Cancel flag | Insert Operation InCache if (ImportDataCache.CheckCancelFlag(EntityType.Contact)) { ImportDataCache.ResetAll(EntityType.Contact); throw new OperationCanceledException(); } ImportDataCache.Insert(EntityType.Contact, (ImportDataOperation)Clone()); #endregion #region Save tags var findedTagsValues = new List <string>(); findedTags.Values.ToList().ForEach(t => { findedTagsValues.AddRange(t); }); findedTagsValues = findedTagsValues.Distinct().ToList(); var allTagsForImport = tagDao.GetAndAddTags(EntityType.Contact, findedTagsValues.Distinct().ToArray()); foreach (var findedTagKey in findedTags.Keys) { var curTagNames = findedTags[findedTagKey]; var curTagIds = curTagNames.ConvertAll(n => allTagsForImport.ContainsKey(n) ? allTagsForImport[n] : 0).Where(id => id != 0).ToArray(); tagDao.AddTagToEntity(EntityType.Contact, fakeRealContactIdHash[findedTagKey], curTagIds); } _log.Info("ImportContactsData. Tags saved"); #endregion Percentage += 12.5; #region Check Cancel flag | Insert Operation InCache if (ImportDataCache.CheckCancelFlag(EntityType.Contact)) { ImportDataCache.ResetAll(EntityType.Contact); throw new OperationCanceledException(); } ImportDataCache.Insert(EntityType.Contact, (ImportDataOperation)Clone()); #endregion Complete(); }
protected void Page_Load(object sender, EventArgs e) { SetPageTitle(Translation.GetTranslation.Term(".moduleList." + m_sMODULE)); Visible = (Security.GetUserAccess(m_sMODULE, "edit") >= 0); if (!Visible) { return; } gID = CommonTypeConvert.ToGuid(Request["ID"]); if (!IsPostBack) { string sLOAD_MODULE = "Invoices"; string sLOAD_MODULE_KEY = "INVOICE_ID"; Guid gQUOTE_ID = CommonTypeConvert.ToGuid(Request["QUOTE_ID"]); Guid gORDER_ID = CommonTypeConvert.ToGuid(Request["ORDER_ID"]); Guid gDuplicateID = CommonTypeConvert.ToGuid(Request["DuplicateID"]); if (!CommonTypeConvert.IsEmptyGuid(gID) || !CommonTypeConvert.IsEmptyGuid(gDuplicateID) || !CommonTypeConvert.IsEmptyGuid(gQUOTE_ID) || !CommonTypeConvert.IsEmptyGuid(gORDER_ID)) { string innerSql = ApplicationSQL.SQL["Invoices_EditView_323"].ToString(); var oQuery = new InlineQueryDBManager(); oQuery.CommandText = innerSql; if (!CommonTypeConvert.IsEmptyGuid(gQUOTE_ID)) { //Load the data from the QUOTES record. sLOAD_MODULE = "Quotes"; sLOAD_MODULE_KEY = "QUOTE_ID"; innerSql = ApplicationSQL.SQL["Invoices_EditView_333"].ToString(); oQuery.CommandText = innerSql; //Filter by the module we are loading. CRMSecurity.Filter(oQuery, sLOAD_MODULE, "edit"); TypeConvert.AppendParameter(oQuery, gQUOTE_ID, "ID", false); } else if (!CommonTypeConvert.IsEmptyGuid(gORDER_ID)) { // Load the data from the ORDERS record. sLOAD_MODULE = "Orders"; sLOAD_MODULE_KEY = "ORDER_ID"; innerSql = ApplicationSQL.SQL["Invoices_EditView"].ToString(); oQuery.CommandText = innerSql; //Filter by the module we are loading. CRMSecurity.Filter(oQuery, sLOAD_MODULE, "edit"); TypeConvert.AppendParameter(oQuery, gORDER_ID, "ID", false); } else { //Use new CRMSecurity.Filter() function to apply Team and ACL security rules. CRMSecurity.Filter(oQuery, m_sMODULE, "edit"); if (!CommonTypeConvert.IsEmptyGuid(gDuplicateID)) { TypeConvert.AppendParameter(oQuery, gDuplicateID, "ID", false); gID = Guid.Empty; } else { TypeConvert.AppendParameter(oQuery, gID, "ID", false); } } using (SqlDataReader rdr = oQuery.ExecuteReader(CommandBehavior.SingleRow)) { if (rdr.Read()) { ctlModuleHeader.Title = CommonTypeConvert.ToString(rdr["NAME"]); SetPageTitle(Translation.GetTranslation.Term(".moduleList." + m_sMODULE) + " - " + ctlModuleHeader.Title); Utils.UpdateTracker(Page, m_sMODULE, gID, ctlModuleHeader.Title); ViewState["ctlModuleHeader.Title"] = ctlModuleHeader.Title; ViewState["BILLING_ACCOUNT_ID"] = CommonTypeConvert.ToGuid(rdr["BILLING_ACCOUNT_ID"]); ViewState["SHIPPING_ACCOUNT_ID"] = CommonTypeConvert.ToGuid(rdr["SHIPPING_ACCOUNT_ID"]); new DynamicControl(this, "QUOTE_ID").ID = CommonTypeConvert.ToGuid(rdr["QUOTE_ID"]); new DynamicControl(this, "ORDER_ID").ID = CommonTypeConvert.ToGuid(rdr["ORDER_ID"]); AppendEditViewFields(m_sMODULE + ".EditView", tblMain, rdr); AppendEditViewFields(m_sMODULE + ".EditAddress", tblAddress, rdr); AppendEditViewFields(m_sMODULE + ".EditDescription", tblDescription, rdr); //Dynamic buttons need to be recreated in order for events to fire. ctlDynamicButtons.AppendButtons(m_sMODULE + ".EditView", CommonTypeConvert.ToGuid(rdr["ASSIGNED_USER_ID"]), rdr); if (!CommonTypeConvert.IsEmptyGuid(gQUOTE_ID)) { new DynamicControl(this, "QUOTE_ID").ID = gQUOTE_ID; new DynamicControl(this, "QUOTE_NAME").Text = CommonTypeConvert.ToString(rdr["NAME"]); ctlEditLineItemsView.LoadLineItems(gQUOTE_ID, Guid.Empty, rdr, sLOAD_MODULE, sLOAD_MODULE_KEY); } else if (!CommonTypeConvert.IsEmptyGuid(gORDER_ID)) { new DynamicControl(this, "ORDER_ID").ID = gORDER_ID; new DynamicControl(this, "ORDER_NAME").Text = CommonTypeConvert.ToString(rdr["NAME"]); ctlEditLineItemsView.LoadLineItems(gORDER_ID, Guid.Empty, rdr, sLOAD_MODULE, sLOAD_MODULE_KEY); } else { ctlEditLineItemsView.LoadLineItems(gID, gDuplicateID, rdr, sLOAD_MODULE, sLOAD_MODULE_KEY); } } else { ctlEditLineItemsView.LoadLineItems(gID, gDuplicateID, null, String.Empty, String.Empty); //If item is not visible, then don't allow save //Dynamic buttons need to be recreated in order for events to fire. ctlDynamicButtons.AppendButtons(m_sMODULE + ".EditView", Guid.Empty, null); ctlDynamicButtons.DisableAll(); ctlDynamicButtons.ErrorText = Translation.GetTranslation.Term("ACL.LBL_NO_ACCESS"); } } } else { AppendEditViewFields(m_sMODULE + ".EditView", tblMain, null); AppendEditViewFields(m_sMODULE + ".EditAddress", tblAddress, null); AppendEditViewFields(m_sMODULE + ".EditDescription", tblDescription, null); //Dynamic buttons need to be recreated in order for events to fire. ctlDynamicButtons.AppendButtons(m_sMODULE + ".EditView", Guid.Empty, null); //Prepopulate the Account. Guid gPARENT_ID = CommonTypeConvert.ToGuid(Request["PARENT_ID"]); if (!CommonTypeConvert.IsEmptyGuid(gPARENT_ID)) { string sMODULE = String.Empty; string sPARENT_TYPE = String.Empty; string sPARENT_NAME = String.Empty; CommonProcedure.ParentGet(ref gPARENT_ID, ref sMODULE, ref sPARENT_TYPE, ref sPARENT_NAME); if (!CommonTypeConvert.IsEmptyGuid(gPARENT_ID) && sMODULE == "Accounts") { UpdateAccount(gPARENT_ID, true, true); } if (!CommonTypeConvert.IsEmptyGuid(gPARENT_ID) && sMODULE == "Contacts") { UpdateContact(gPARENT_ID, true, true); } else if (!CommonTypeConvert.IsEmptyGuid(gPARENT_ID) && sMODULE == "Opportunities") { new DynamicControl(this, "OPPORTUNITY_ID").ID = gPARENT_ID; new DynamicControl(this, "OPPORTUNITY_NAME").Text = sPARENT_NAME; } } ctlEditLineItemsView.LoadLineItems(gID, gDuplicateID, new InlineQueryDBManager(), null, String.Empty, String.Empty); } } else { // When validation fails, the header title does not retain its value. Update manually. ctlModuleHeader.Title = CommonTypeConvert.ToString(ViewState["ctlModuleHeader.Title"]); SetPageTitle(Translation.GetTranslation.Term(".moduleList." + m_sMODULE) + " - " + ctlModuleHeader.Title); var ctlBILLING_ACCOUNT_ID = new DynamicControl(this, "BILLING_ACCOUNT_ID"); var ctlSHIPPING_ACCOUNT_ID = new DynamicControl(this, "SHIPPING_ACCOUNT_ID"); if (CommonTypeConvert.ToGuid(ViewState["BILLING_ACCOUNT_ID"]) != ctlBILLING_ACCOUNT_ID.ID) { UpdateAccount(ctlBILLING_ACCOUNT_ID.ID, true, true); ViewState["BILLING_ACCOUNT_ID"] = ctlBILLING_ACCOUNT_ID.ID; ViewState["SHIPPING_ACCOUNT_ID"] = ctlBILLING_ACCOUNT_ID.ID; } if (CommonTypeConvert.ToGuid(ViewState["SHIPPING_ACCOUNT_ID"]) != ctlSHIPPING_ACCOUNT_ID.ID) { UpdateAccount(ctlSHIPPING_ACCOUNT_ID.ID, false, true); ViewState["SHIPPING_ACCOUNT_ID"] = ctlSHIPPING_ACCOUNT_ID.ID; } } }
public List <int> GetCrmContactIds(string email) { var ids = new List <int>(); if (string.IsNullOrEmpty(email)) { return(ids); } try { var q = new SqlQuery(CrmContactTable.TABLE_NAME.Alias(CC_ALIAS)) .Select(CrmContactTable.Columns.Id.Prefix(CC_ALIAS), CrmContactTable.Columns.IsCompany.Prefix(CC_ALIAS), CrmContactTable.Columns.IsShared.Prefix(CC_ALIAS)) .InnerJoin(CrmContactInfoTable.TABLE_NAME.Alias(CCI_ALIAS), Exp.EqColumns(CrmContactTable.Columns.Tenant.Prefix(CC_ALIAS), CrmContactInfoTable.Columns.Tenant.Prefix(CCI_ALIAS)) & Exp.EqColumns(CrmContactTable.Columns.Id.Prefix(CC_ALIAS), CrmContactInfoTable.Columns.ContactId.Prefix(CCI_ALIAS))) .Where(CrmContactTable.Columns.Tenant.Prefix(CC_ALIAS), Tenant) .Where(CrmContactInfoTable.Columns.Type.Prefix(CCI_ALIAS), (int)ContactInfoType.Email) .Where(CrmContactInfoTable.Columns.Data.Prefix(CCI_ALIAS), email); var contactList = Db.ExecuteList(q) .ConvertAll( r => new { Id = Convert.ToInt32(r[0]), Company = Convert.ToBoolean(r[1]), ShareType = (ShareType)Convert.ToInt32(r[2]) }); if (!contactList.Any()) { return(ids); } CoreContext.TenantManager.SetCurrentTenant(Tenant); SecurityContext.AuthenticateMe(new Guid(CurrentUserId)); foreach (var info in contactList) { var contact = info.Company ? new Company() : (Contact) new Person(); contact.ID = info.Id; contact.ShareType = info.ShareType; if (CRMSecurity.CanAccessTo(contact)) { ids.Add(info.Id); } } } catch (Exception e) { Log.WarnFormat("GetCrmContactsId(tenandId='{0}', userId='{1}', email='{2}') Exception:\r\n{3}\r\n", Tenant, CurrentUserId, email, e.ToString()); } return(ids); }
private IEnumerable <TaskWrapper> ToTaskListWrapper(IEnumerable <Task> itemList) { var result = new List <TaskWrapper>(); var contactIDs = new List <int>(); var taskIDs = new List <int>(); var categoryIDs = new List <int>(); var entityWrappersIDs = new Dictionary <EntityType, List <int> >(); foreach (var item in itemList) { taskIDs.Add(item.ID); if (!categoryIDs.Contains(item.CategoryID)) { categoryIDs.Add(item.CategoryID); } if (item.ContactID > 0 && !contactIDs.Contains(item.ContactID)) { contactIDs.Add(item.ContactID); } if (item.EntityID > 0) { if (item.EntityType != EntityType.Opportunity && item.EntityType != EntityType.Case) { continue; } if (!entityWrappersIDs.ContainsKey(item.EntityType)) { entityWrappersIDs.Add(item.EntityType, new List <int> { item.EntityID }); } else if (!entityWrappersIDs[item.EntityType].Contains(item.EntityID)) { entityWrappersIDs[item.EntityType].Add(item.EntityID); } } } var entityWrappers = new Dictionary <string, EntityWrapper>(); foreach (var entityType in entityWrappersIDs.Keys) { switch (entityType) { case EntityType.Opportunity: DaoFactory.DealDao.GetDeals(entityWrappersIDs[entityType].Distinct().ToArray()) .ForEach(item => { if (item == null) { return; } entityWrappers.Add( string.Format("{0}_{1}", (int)entityType, item.ID), new EntityWrapper { EntityId = item.ID, EntityTitle = item.Title, EntityType = "opportunity" }); }); break; case EntityType.Case: DaoFactory.CasesDao.GetByID(entityWrappersIDs[entityType].ToArray()) .ForEach(item => { if (item == null) { return; } entityWrappers.Add( string.Format("{0}_{1}", (int)entityType, item.ID), new EntityWrapper { EntityId = item.ID, EntityTitle = item.Title, EntityType = "case" }); }); break; } } var categories = DaoFactory.ListItemDao.GetItems(categoryIDs.ToArray()).ToDictionary(x => x.ID, x => new TaskCategoryBaseWrapper(x)); var contacts = DaoFactory.ContactDao.GetContacts(contactIDs.ToArray()).ToDictionary(item => item.ID, ToContactBaseWithEmailWrapper); var restrictedContacts = DaoFactory.ContactDao.GetRestrictedContacts(contactIDs.ToArray()).ToDictionary(item => item.ID, ToContactBaseWithEmailWrapper); foreach (var item in itemList) { var taskWrapper = new TaskWrapper(item) { CanEdit = CRMSecurity.CanEdit(item) }; if (contacts.ContainsKey(item.ContactID)) { taskWrapper.Contact = contacts[item.ContactID]; } if (restrictedContacts.ContainsKey(item.ContactID)) { taskWrapper.Contact = restrictedContacts[item.ContactID]; /*Hide some fields. Should be refactored! */ taskWrapper.Contact.Currency = null; taskWrapper.Contact.Email = null; taskWrapper.Contact.AccessList = null; } if (item.EntityID > 0) { var entityStrKey = string.Format("{0}_{1}", (int)item.EntityType, item.EntityID); if (entityWrappers.ContainsKey(entityStrKey)) { taskWrapper.Entity = entityWrappers[entityStrKey]; } } if (categories.ContainsKey(item.CategoryID)) { taskWrapper.Category = categories[item.CategoryID]; } result.Add(taskWrapper); } return(result); }