Пример #1
0
        //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);
        }
Пример #2
0
        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);
                }
            }
        }
Пример #3
0
        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);
                    }
                }
            }
        }
Пример #4
0
        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));
                        }
                    }
                }
            }
        }
Пример #5
0
        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));
                        }
                    }
                }
            }
        }
Пример #6
0
        /// <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);
        }
Пример #7
0
        /// <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));
            //}
        }