//private void CreateContactForMail(PartialRecord partialRecord, string mail) { // var ci = CreateContact(partialRecord); // CommunicationEmailRecord cer = new CommunicationEmailRecord(); // cer.Email = mail; // cer.DataInserimento = DateTime.Now; // cer.DataModifica = DateTime.Now; // cer.Produzione = true; // cer.Validated = true; // cer.EmailContactPartRecord_Id = ci.Id; // _repositoryCommunicationEmailRecord.Create(cer); //} //private void CreateContactForSms(PartialRecord partialRecord, string prefix, string sms) { // var ci = CreateContact(partialRecord); // CommunicationSmsRecord csr = new CommunicationSmsRecord(); // csr.Prefix = prefix; // csr.Sms = sms; // csr.DataInserimento = DateTime.Now; // csr.DataModifica = DateTime.Now; // csr.Produzione = true; // csr.Validated = true; // csr.SmsContactPartRecord_Id = ci.Id; // _repositoryCommunicationSmsRecord.Create(csr); //} private ContentItem CreateContact(PartialRecord partialRecord) { ContentItem ci = _contentManager.Create("CommunicationContact"); ci.As <TitlePart>().Title = partialRecord.Name; return(ci); }
private void ImportRecord(List <string> intestazioni, List <string> campi) { string[] elencoMail = null; string[] elencoSms = null; PartialRecord partialRecord = new PartialRecord(); // popola le strutture dati di appoggio LoadData(intestazioni, campi, ref partialRecord, ref elencoMail, ref elencoSms); // gestisce le mail foreach (var mail in elencoMail) { ImportMail(mail, partialRecord); } // gestisce gli sms string[] smsComponents = null; // prefix and sms foreach (var prefixAndSms in elencoSms) { smsComponents = prefixAndSms.Split(smsSeparator); if ((smsComponents.Count() > 1) && (string.IsNullOrWhiteSpace(smsComponents[1]) == false)) { ImportSms(smsComponents[0], smsComponents[1], partialRecord); } } }
private void LoadData(List <string> intestazioni, List <string> campi, ref PartialRecord partialRecord, ref string[] elencoMail, ref string[] elencoSms) { string campo = null; for (int i = 0; i < campi.Count; i++) { campo = campi[i]; if (i == idxContactId) { if (string.IsNullOrWhiteSpace(campo) == false) { partialRecord.Id = Convert.ToInt32(campo); } } else if (i == idxContactName) { partialRecord.Name = campo; } else if (i == idxContactEmail) { if (string.IsNullOrWhiteSpace(campo)) { elencoMail = new string[0]; } else { elencoMail = campo.Split(fieldSeparator); } } else if (i == idxContactSms) { if (string.IsNullOrWhiteSpace(campo)) { elencoSms = new string[0]; } else { elencoSms = campo.Split(fieldSeparator); } } else if (string.IsNullOrWhiteSpace(intestazioni[i]) == false) { if (intestazioni[i].StartsWith("CommunicationContactPart.")) { partialRecord.CommunicationContact.Add(intestazioni[i].Substring(25), campo); } else { partialRecord.Profile.Add(intestazioni[i], campo); } } } }
private void ImportSms(string prefix, string sms, PartialRecord partialRecord) { ContentItem contact = null; var elencoItems = _communicationService.GetContactsFromSms(prefix, sms); if (elencoItems.Count == 0) { contact = FindContact(partialRecord.Name); if (contact == null) { contact = CreateContact(partialRecord); } CreateSmsForContact(prefix, sms, contact.Id); UpdateContactInfo(contact, partialRecord); TotSms++; } else { foreach (var item in elencoItems) { if (IsSameContact(item, partialRecord)) { UpdateContactInfo(item, partialRecord); TotSms++; } else { if (IsMasterContact(item)) { contact = FindContact(partialRecord.Name); if (contact == null) { contact = CreateContact(partialRecord); } // sgancia la mail dal master e la associa al contatto var csr = _repositoryCommunicationSmsRecord.Get(x => x.Prefix == prefix && x.Sms == sms); csr.SmsContactPartRecord_Id = contact.Id; _repositoryCommunicationSmsRecord.Update(csr); UpdateContactInfo(contact, partialRecord); TotSms++; } else { var title = item.As <TitlePart>().Title; Errors.Add(string.Format("Sms phone number {0}/{1} already assigned to contact \"{2}\" (id: {3}).", prefix, sms, title, item.Id)); } } } } }
private void ImportMail(string mail, PartialRecord partialRecord) { ContentItem contact = null; var elencoItems = _communicationService.GetContactsFromMail(mail); if (elencoItems.Count == 0) { contact = FindContact(partialRecord.Name); if (contact == null) { contact = CreateContact(partialRecord); } CreateMailForContact(mail, contact.Id); UpdateContactInfo(contact, partialRecord); TotMail++; } else { foreach (var item in elencoItems) { if (IsSameContact(item, partialRecord)) { UpdateContactInfo(item, partialRecord); TotMail++; } else { if (IsMasterContact(item)) { contact = FindContact(partialRecord.Name); if (contact == null) { contact = CreateContact(partialRecord); } // sgancia la mail dal master e la associa al contatto var cer = _repositoryCommunicationEmailRecord.Get(x => x.Email == mail); cer.EmailContactPartRecord_Id = contact.Id; _repositoryCommunicationEmailRecord.Update(cer); UpdateContactInfo(contact, partialRecord); TotMail++; } else { var title = item.As <TitlePart>().Title; Errors.Add(string.Format("Mail {0} already assigned to contact \"{1}\" (id: {2}).", mail, title, item.Id)); } } } } }
/// <summary> /// Controlla se il content item appartiene allo stesso contatto: verifica prima per nome e poi per id. /// La verifica viene fattaprima per nome per non considerare diversi i casi in cui un contatto era stato esportato, /// poi eliminato e poi reimportato. In questo caso il sistema gli ha assegnato un id diverso. /// </summary> /// <param name="ci"></param> /// <param name="partialRecord"></param> /// <returns></returns> private bool IsSameContact(ContentItem ci, PartialRecord partialRecord) { bool result = false; if (partialRecord.Name == ci.As <TitlePart>().Title) { result = true; } else if (partialRecord.Id != 0) { if (partialRecord.Id == ci.Id) { result = true; } } return(result); }
/// <summary> /// Aggiorna le altre info del contatto: nome e profile part. /// </summary> private void UpdateContactInfo(ContentItem ci, PartialRecord partialRecord) { ci.As <TitlePart>().Title = partialRecord.Name; ContentPart profile = ((dynamic)ci).ProfilePart; if (profile != null) { foreach (var prop in partialRecord.Profile) { var cf = profile.Fields.Where(x => x.Name == prop.Key).FirstOrDefault(); UpdateSinglePart(ci, prop, cf); } } ContentPart CommunicationContact = ((dynamic)ci).CommunicationContactPart; if (CommunicationContact != null) { foreach (var prop in partialRecord.CommunicationContact) { var cf = CommunicationContact.Fields.Where(x => x.Name == prop.Key).FirstOrDefault(); UpdateSinglePart(ci, prop, cf); } } //if (cf != null) { // if (cf.GetType() == typeof(DateTime)) { // ((dynamic)cf).DateTime = prop.Value; // } // else if (cf.GetType() == typeof(TaxonomyField)) { // UpdateTaxonomyField(ci, cf as TaxonomyField, prop.Value); // } // else if ((cf.GetType() == typeof(MediaLibraryPickerField)) || (cf.GetType() == typeof(ContentPickerField))) { // Errors.Add(string.Format("Property {0} of type {1} cannot be updated by CSV import.", prop.Key, cf.GetType().Name)); // } // else { // ((dynamic)cf).Value = prop.Value; // } //} //else { // Errors.Add(string.Format("Field \"{0}\" not found in Contact.", prop.Key)); //} }