protected void SaveOrUpdateContact(object sender, CommandEventArgs e) { try { var dao = Global.DaoFactory; Contact contact; List <Contact> contactsForSetManager = new List <Contact>(); var typeAddedContact = Request["typeAddedContact"]; #region Rights part #1 ShareType shareType = ShareType.None;// 0 - NotShared, 1 - ReadWriting, 2 - Reading if (!String.IsNullOrEmpty(Request["isPublicContact"])) { try { shareType = (ShareType)(Convert.ToInt32(Request["isPublicContact"])); } catch (Exception) { throw new ArgumentException(); } } #endregion #region BaseInfo 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(), ShareType = shareType }; peopleCompany.ID = dao.GetContactDao().SaveContact(peopleCompany); companyID = peopleCompany.ID; contactsForSetManager.Add(peopleCompany); } 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() }; } contact.About = !String.IsNullOrEmpty(Request["baseInfo_contactOverview"]) ? Request["baseInfo_contactOverview"].Trim() : null; contact.ShareType = shareType; #endregion #region ContactType and Currency contact.ContactTypeID = Convert.ToInt32(Request["baseInfo_contactType"]); if (contact.ContactTypeID != 0) { var listItem = dao.GetListItemDao().GetByID(contact.ContactTypeID); if (listItem == null) { throw new Exception(CRMErrorsResource.ContactTypeNotFound); } } contact.Currency = Convert.ToString(Request["baseInfo_currency"]); if (!String.IsNullOrEmpty(contact.Currency)) { var currency = CurrencyProvider.Get(contact.Currency); if (currency == null) { throw new Exception(CRMErrorsResource.CurrencyNotFound); } } #endregion #region Base Operation Of Save/Update if (TargetContact != null) { contact.ID = TargetContact.ID; contact.StatusID = TargetContact.StatusID; dao.GetContactDao().UpdateContact(contact); var messageAction = contact is Company ? MessageAction.CompanyUpdated : MessageAction.PersonUpdated; MessageService.Send(HttpContext.Current.Request, messageAction, contact.GetTitle()); contact = dao.GetContactDao().GetByID(contact.ID); } else { contact.ID = dao.GetContactDao().SaveContact(contact); var messageAction = contact is Company ? MessageAction.CompanyCreated : MessageAction.PersonCreated; MessageService.Send(HttpContext.Current.Request, messageAction, contact.GetTitle()); contact = dao.GetContactDao().GetByID(contact.ID); } contactsForSetManager.Add(contact); #endregion #region persons for company if (contact is Company) { var assignedContactsIDs = new List <int>(); if (!String.IsNullOrEmpty(Request["baseInfo_assignedNewContactsIDs"])) { try { var assignedContactsObjs = JArray.Parse(Request["baseInfo_assignedNewContactsIDs"]); var newAssignedContacts = new List <Contact>(); var recordIndex = 0; foreach (var assignedContactsObj in assignedContactsObjs) { newAssignedContacts.Add(new Person { ID = recordIndex, ShareType = shareType, CompanyID = contact.ID, FirstName = assignedContactsObj.Value <String>("FirstName"), LastName = assignedContactsObj.Value <String>("LastName") }); recordIndex++; } dao.GetContactDao().SaveContactList(newAssignedContacts); if (newAssignedContacts.Count != 0) { contactsForSetManager.AddRange(newAssignedContacts); assignedContactsIDs.AddRange(newAssignedContacts.Select(c => c.ID).ToList()); } } catch (Exception ex) { log4net.LogManager.GetLogger("ASC.CRM").Error(ex); } } if (!String.IsNullOrEmpty(Request["baseInfo_assignedContactsIDs"])) { assignedContactsIDs.AddRange(Request["baseInfo_assignedContactsIDs"].Split(',').Select(item => Convert.ToInt32(item)).ToList()); } if (TargetContact != null && !CRMSecurity.IsAdmin) { var restrictedMembers = dao.GetContactDao().GetRestrictedMembers(contact.ID); assignedContactsIDs.AddRange(restrictedMembers.Select(m => m.ID).ToList()); } dao.GetContactDao().SetMembers(contact.ID, assignedContactsIDs.ToArray()); } #endregion #region tags var assignedTags = Request["baseInfo_assignedTags"]; if (assignedTags != null) { var oldTagList = dao.GetTagDao().GetEntityTags(EntityType.Contact, contact.ID); foreach (var tag in oldTagList) { dao.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(); dao.GetTagDao().SetTagToEntity(EntityType.Contact, contact.ID, newTagList); } } #endregion #region contact infos (addresses, mailes, phones etc.) 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) { if (!String.IsNullOrEmpty(fieldValue)) { dao.GetCustomFieldDao().SetFieldValue(EntityType.Person, contact.ID, fieldID, ""); } dao.GetCustomFieldDao().SetFieldValue(EntityType.Person, contact.ID, fieldID, fieldValue); } else { if (!String.IsNullOrEmpty(fieldValue)) { dao.GetCustomFieldDao().SetFieldValue(EntityType.Company, contact.ID, fieldID, ""); } dao.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()); } dao.GetContactInfoDao().DeleteByContact(contact.ID); dao.GetContactInfoDao().SaveList(contactInfos); #endregion #region Photo 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); } #endregion #region Rights part #2 SetContactManager(contactsForSetManager); #endregion #region Link with mail message int result; var linkMessageId = int.TryParse(Request["linkMessageId"], out result) ? result : 0; if (linkMessageId > 0) { try { LinkWithMessage(linkMessageId, contact.ID); } catch (Exception ex) { log4net.LogManager.GetLogger("ASC.CRM").Error(ex); } } #endregion 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)), 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); } } }
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))); }