Example #1
0
 public int AddGroupContactList(List<GroupContact> listContactId, DuplicateContactMode mode)
 {
     DBManager db = new DBManager();
     return db.AddGroupContactList(listContactId, mode);
 }
Example #2
0
 public void UpdateDuplicateContactMode(DuplicateContactMode mode)
 {
     DBParameter.DuplicateMode = mode;
 }
Example #3
0
 public int AddOrUpdateContactsFromAccount(List<Contact> list, string accTypeName, DuplicateContactMode mode)
 {
     DBManager db = new DBManager();
     return db.AddOrUpdateContactsFromAccount(list, accTypeName, mode);
 }
        /// <summary>
        /// Import from CSV NEW
        /// </summary>
        /// <param name="list"></param>
        /// <param name="file"></param>
        /// <returns></returns>
        /// 
        public FileImportResult ImportFromCSVMultiHeader(string data, DuplicateContactMode mode)
        {
            FileImportResult result = new FileImportResult();
            

            string[] contactSplits = data.Split(new string[] { "\r", "\r\n", "\n" }, StringSplitOptions.None);
            var CSVHeader = contactSplits[0].Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries).ToList().Select(n => GroupDB.TrimSpace(GroupDB.RemoveControlChars(n))).ToArray();
            
            int size = contactSplits.Count();
            EmailType emailType = dbManager.GetPreferredEmailTypeByAccountTypeNameEF(AccountTypeDB.TYPE_CSV_STRING);
            FaxType faxType = dbManager.GetPreferredFaxTypeByAccountTypeNameEF(AccountTypeDB.TYPE_CSV_STRING);
            Account account = dbManager.GetCSVAccountEF();
            string accTypeName = AccountTypeDB.TYPE_CSV_STRING;
            List<CMData.Contact> listContact = new List<CMData.Contact>();
            
            CMData.Contact contact;

            if (! (CSVHeader.Contains<string>("first_name") || CSVHeader.Contains<string>("last_name")) || ! (CSVHeader.Contains<string>("email") || CSVHeader.Contains<string>("Business Fax")))
            {
                result.errorCode = FileImExportController.CODE_FILE_STRUCTURE_NOT_SUITABLE;
                return result;
            }

            for (int i = 1; i < size; i++)
            {
                string bareData = contactSplits[i];
                var valueSplits = splitCSVLine(bareData);

                if (valueSplits.Count() <= 1)
                    continue;

                var last_name = String.Empty;
                var first_name = String.Empty;
                var middle_name = String.Empty;
                var email = String.Empty;
                var fax = String.Empty;


                for (int j = 0; j < valueSplits.Count(); j++)
                {
                    var value = valueSplits.ElementAt(j);

                    value = formatQuoteCommaToImport(value);
                                      
                    string column = CSVHeader[j];
                    if (column.Equals("first_name"))
                    {
                        first_name = value;
                    }
                    if (column.Equals("last_name"))
                    {
                        last_name = value;
                    }
                    if (column.Equals("middle_name"))
                    {
                        middle_name = value;
                    }
                    if (column.Equals("email"))
                    {
                        email = value;
                        //if (!validateEmail(email))
                        //    email = "";
                    }

                    if (column.Equals("Business Fax"))
                    {
                        fax = value;
                    }
                }
                if (String.IsNullOrEmpty(first_name) && String.IsNullOrEmpty(last_name) && String.IsNullOrEmpty(email) && String.IsNullOrEmpty(fax))
                {
                    continue;
                }
                List<Email> listEmail = new List<Email>();
                if (!String.IsNullOrEmpty(email))
                {
                    Email em = new Email();

                    em.Value = email;
                    em.EmailType = emailType;
                    em.EmailTypeId = emailType.Id;
                    listEmail.Add(em);
                }
                List<Fax> listFax = new List<Fax>();
                if (!String.IsNullOrEmpty(fax))
                {
                    Fax faxDB = new Fax();
                    faxDB.Value = fax;
                    faxDB.FaxType = faxType;
                    faxDB.FaxTypeId = faxType.Id;
                    listFax.Add(faxDB);
                }

                contact = new CMData.Contact();
                contact.AccountId = account.Id;
                contact.FirstName = first_name;
                contact.LastName = last_name;
                contact.MiddleName = middle_name;
                contact.Emails = listEmail;
                contact.Faxes = listFax;
                listContact.Add(contact);
            }
            result = AddOrUpdateContact(listContact, accTypeName, mode);
            return result;
        }
        private FileImportResult AddOrUpdateContact(List<CMData.Contact> listContact, string accTypeName, DuplicateContactMode mode)
        {
            FileImportResult result = new FileImportResult();
            int moreContactCount = listContact.Count();
            int currentContactNumber = dbManager.GetTotalContactCount();
            int totalContact = currentContactNumber + moreContactCount;
            if (totalContact > ContactDB.MAX_CONTACT && totalContact <= ContactDB.MAX_LIMITATION)
            {
                result.errorCode = CODE_FILE_EXCEED_CURRENT_LIMITATION;
                result.downloaded = totalContact;
                return result;
            }
            
            if(totalContact > ContactDB.MAX_LIMITATION)
            {
                result.errorCode = CODE_FILE_EXCEED_MAXIMUM;
                return result;
            }

            int applied = dbManager.AddOrUpdateContactsFromAccount(listContact, accTypeName, mode);
            result.downloaded = listContact.Count();
            result.applied = applied;

            return result;
        }
        public FileImportResult ImportFromCSV(string data, DuplicateContactMode mode)
        {
            FileImportResult result = new FileImportResult();

            //get db
            EmailType emailType = dbManager.GetPreferredEmailTypeByAccountTypeNameEF(AccountTypeDB.TYPE_CSV_STRING);
            FaxType faxType = dbManager.GetPreferredFaxTypeByAccountTypeNameEF(AccountTypeDB.TYPE_CSV_STRING);
            Account account = dbManager.GetCSVAccountEF();
            string accTypeName = AccountTypeDB.TYPE_CSV_STRING;

            //split stream from file
            string[] contactSplits = data.Split(new string[] { "\r", "\r\n", "\n" }, StringSplitOptions.None);
            var CSVHeader = contactSplits[0].Split(new char[] { ',' }).ToList().Select(n => GroupDB.TrimSpace(GroupDB.RemoveControlChars(n)).ToLower()).ToList();

            //define var
            int size = contactSplits.Count();
            List<CMData.Contact> listContact = new List<CMData.Contact>();
            //header index
            int IdFirstName = -1;
            int IdLastName = -1;
            int IdMidName = -1;
            int IdFullName = -1;
            int IdFax = -1;
            int IdEmail = -1;

            //check header
            //step 1: first last mid
            IdFirstName = CSVHeader.FindIndex(n => n.Equals("first name") || n.Equals("first") || n.Equals("first_name"));
            IdLastName = CSVHeader.FindIndex(n => n.Equals("last name") || n.Equals("last") || n.Equals("last_name"));
            IdMidName = CSVHeader.FindIndex(n => n.Equals("middle name") || n.Equals("middle") || n.Equals("middle_name"));

            //step 2: fullname
            if(IdFirstName < 0 && IdLastName < 0 && IdMidName < 0)
            {
                IdFullName = CSVHeader.FindIndex(n => n.Equals("full name") || n.Equals("name") || n.Equals("full_name") || n.Equals("fullname"));
            }

            //step3: Email & Fax
            if(IdFirstName >= 0 || IdLastName >= 0 || IdMidName >= 0 || IdFullName >= 0)
            {
                IdEmail = CSVHeader.FindIndex(n => n.Equals("email address") || n.Equals("email_address") || n.Equals("e-mail_address") || n.Equals("e-mail") || n.Equals("email") || n.Equals("home email") || n.Equals("home_email") || n.Equals("work email") || n.Equals("work_email") || n.Equals("personal email") || n.Equals("personal_email"));
                IdFax = CSVHeader.FindIndex(n => n.Equals("fax number") || n.Equals("fax_number") || n.Equals("business fax") || n.Equals("business_fax") || n.Equals("fax") || n.Equals("home fax") || n.Equals("home_fax") || n.Equals("work fax") || n.Equals("work_fax"));
            }
            else
            {
                result.errorCode = FileImExportController.CODE_FILE_STRUCTURE_NOT_SUITABLE;
                return result;
            }

            //parse data fore each row // i=0 is headers row
            for (int i = 1; i < size; i++)
            {
                string bareData = contactSplits[i];
                var valueSplits = splitCSVLine(bareData);
                var maxColumnIndex = valueSplits.Count() - 1;

                if (valueSplits.Count() < 1)
                    continue;
                var valueFullName = String.Empty;
                var valueLastName = String.Empty;
                var valueFirstName = String.Empty;
                var valueMidName = String.Empty;
                var valueEmail = String.Empty;
                var valueFax = String.Empty;

                //parse

                //get full name or detail FLM name
                if (IdFullName >= 0)
                {
                    if(IdFullName > maxColumnIndex)
                    {
                        continue;
                    }
                    valueFullName = valueSplits.ElementAt(IdFullName);

                    if (string.IsNullOrEmpty(valueFullName)) //specify full name, but it's empty
                        continue;

                    var cv = new ContactView();
                    cv.Name = valueFullName;
                    cv.SplitFirstLastMidFromFullName(ContactDB.NAME_ORDER_FIRST_LAST_MID);
                    valueFirstName = cv.FirstName;
                    valueLastName = cv.LastName;
                    valueMidName = cv.MiddleName;
                }
                else
                {   if(IdFirstName >= 0 && IdFirstName <= maxColumnIndex)
                        valueFirstName = valueSplits.ElementAt(IdFirstName);

                    if (IdLastName >= 0 && IdLastName <= maxColumnIndex)
                        valueLastName = valueSplits.ElementAt(IdLastName);

                    if (IdMidName >= 0 && IdMidName <= maxColumnIndex)
                        valueMidName = valueSplits.ElementAt(IdMidName);
                }

                //get Fax, Email
                if (IdEmail >= 0 && IdEmail <= maxColumnIndex)
                    valueEmail = valueSplits.ElementAt(IdEmail);

                if (IdFax >= 0 && IdFax <= maxColumnIndex)
                    valueFax = valueSplits.ElementAt(IdFax);

                //check to skip row when specify FLM name, but they're empty
                if (String.IsNullOrEmpty(valueFirstName) && String.IsNullOrEmpty(valueLastName) && String.IsNullOrEmpty(valueMidName))
                {
                    continue;
                }

                //Mapping Email / Fax
                List<Email> listEmail = new List<Email>();
                if (!String.IsNullOrEmpty(valueEmail))
                {
                    Email em = new Email();

                    em.Value = valueEmail;
                    em.EmailType = emailType;
                    em.EmailTypeId = emailType.Id;
                    listEmail.Add(em);
                }
                List<Fax> listFax = new List<Fax>();
                if (!String.IsNullOrEmpty(valueFax))
                {
                    Fax faxDB = new Fax();
                    faxDB.Value = valueFax;
                    faxDB.FaxType = faxType;
                    faxDB.FaxTypeId = faxType.Id;
                    listFax.Add(faxDB);
                }

                //Create Contact obj
                CMData.Contact contact;
                contact = new CMData.Contact();
                contact.AccountId = account.Id;
                contact.FirstName = valueFirstName;
                contact.LastName = valueLastName;
                contact.MiddleName = valueMidName;
                contact.Emails = listEmail;
                contact.Faxes = listFax;
                listContact.Add(contact);
            }

            //write to DB
            result = AddOrUpdateContact(listContact, accTypeName, mode);
            return result;
        }
        public async System.Threading.Tasks.Task<FileImportResult> ImportFromVCFFile(StorageFile file, DuplicateContactMode mode)
        {
            FileImportResult result = new FileImportResult();            
            try
            {
                isVCFFormat = false;             
                var randomAccessStream = await file.OpenReadAsync();
                Stream stream = randomAccessStream.AsStreamForRead();
                using (StreamReader reader = new StreamReader(stream))
                {                    
                    do
                    {
                        string line = reader.ReadLine();
                        // Do something with line
                        GetContacts(line);
                        if(!isVCFFormat)
                        {
                            result.errorCode = FileImExportController.CODE_FILE_STRUCTURE_NOT_SUITABLE;
                            reader.Dispose();
                            contactVCF = null;
                            return result;
                        }
                    }
                    while (reader.Peek() != -1);
                    reader.Dispose();
                    if(contactVCF != null)
                    {

                        contactVCF.Emails = formatEmailTypeForImportVCF(contactVCF.Emails);
                        string accTypeName = AccountTypeD.TYPE_VCF_STRING;
                        List<CMData.Contact> list = new List<CMData.Contact> { contactVCF };
                        result = AddOrUpdateContact(list, accTypeName, mode);
                        contactVCF = null;                   
                    }
                    return result;
                }                
            }
            catch (Exception e)
            {
                result.errorCode = CODE_FILE_IN_USE;
                return result;
            }
        }
        public bool UpdateListContact(ContactView contact, DuplicateContactMode mode, string groupName)
        {
            UpdateFlag();
            var contacts = CheckDuplicateContact(contact, groupName);

            switch (mode)
            {
                case DuplicateContactMode.ALLOW_ADD_NEW:
                    if (groupName == string.Empty)
                    {
                        if (contact.Id == 0)
                        {
                            contact.Id = ++currentPrinterMaxID;
                            listContact_EF.Add(contact);
                            AddToJsonList(contact, MyUtils.ADD);
                        }
                    }

                    break;
                case DuplicateContactMode.DO_NOT_IMPORT:
                    if (groupName != string.Empty && contacts.Count != 0)
                    {
                        return false;
                    }

                    if (groupName == string.Empty && contacts.Count == 0)
                    {
                        if (contact.Id == 0)
                        {
                            contact.Id = ++currentPrinterMaxID;
                            listContact_EF.Add(contact);
                            AddToJsonList(contact, MyUtils.ADD);
                        }
                    }

                    if(contacts.Count != 0)
                    {
                        return false;
                    }

                    break;
                case DuplicateContactMode.REPLACE_WITH_NEW_ITEM:

                    if (groupName != string.Empty)
                    {
                        foreach (var item in contacts)
                        {
                            var groupArr = item.Group.Split(';').ToList();
                            var list = groupArr.Where(l => !l.Equals(groupName));
                            var result = string.Join(";", list.Where(g => !g.Equals(string.Empty)).Select(l => l.ToString()));
                            var contactUpate = listContact_EF.FirstOrDefault(l => l.Id.Equals(item.Id));
                            contactUpate.Group = result;
                            AddToJsonList(contactUpate, MyUtils.UPDATE);
                        }
                    }
                    else
                    {
                        if (contacts.Count != 0)
                        {
                            foreach (var item in contacts)
                            {
                                var data = listContact_EF.FirstOrDefault(l => l.Id.Equals(item.Id));
                                data.Name = contact.Name;
                                data.Group = contact.Group;
                                data.ImportedFrom = contact.ImportedFrom;
                                AddToJsonList(data, MyUtils.UPDATE);
                            }
                        }
                        else
                        {
                            if (contact.Id == 0)
                            {
                                contact.Id = ++currentPrinterMaxID;
                                listContact_EF.Add(contact);
                                AddToJsonList(contact, MyUtils.ADD);
                            }
                        }
                    }

                    break;
                default:
                    break;
            }

            if (contact.Id != 0)
            {
                var data = listContact_EF.FirstOrDefault(l => l.Id.Equals(contact.Id));
                data.Name = contact.Name;
                data.FirstName = contact.FirstName;
                data.LastName = contact.LastName;
                data.MiddleName = contact.MiddleName;
                data.EmailAddress = contact.EmailAddress;
                data.Fax = contact.Fax;
                data.Group = contact.Group;
                AddToJsonList(data, MyUtils.UPDATE);
                UpdateListGroupName();
                UC_AddressBook.Instance.UpdateCountContactPrinter(listContact_EF.Count());
                UC_AddressBook.Instance.UpdateCountContactItemMenu();
                return true;
            }

            if (groupName != string.Empty)
            {
                var data = listContact_EF.FirstOrDefault(l => l.Id.Equals(contact.Id));
                data.Group = contact.Group;
                AddToJsonList(contact, MyUtils.UPDATE);
            }

            UpdateListGroupName();
            UC_AddressBook.Instance.UpdateCountContactPrinter(listContact_EF.Count());
            UC_AddressBook.Instance.UpdateCountContactItemMenu();
            return true;
        }
        public void UpdateListFromLocalContact(List<ContactView> list, DuplicateContactMode mode, string groupName)
        {
            var result = false;
            foreach (ContactView c in list)
            {
                //c.Id = ++currentPrinterMaxID;
                if (UpdateListContact(c, mode, groupName))
                    result = true;
            }

            UpdateListGroupName();

            if (result)
            { 
                var save_success = UC_AddressBook.ResourcesStringLoader.GetString("NOTIFY-Message-SaveSuccess");
                succeededMessage = save_success;
            }

            isReload = true;
            isResumeSelectContacts = false;
        }
 private void radio_btn_do_not_import_Click(object sender, RoutedEventArgs e)
 {
     this.radio_btn_do_not_import.IsChecked = true;
     contactMode = DuplicateContactMode.DO_NOT_IMPORT;
 }
 private void radio_btn_allow_duplicate_Click(object sender, RoutedEventArgs e)
 {
     this.radio_btn_allow_duplicate.IsChecked = true;
     contactMode = DuplicateContactMode.ALLOW_ADD_NEW;
 }
 private void radio_btn_replace_with_new_Click(object sender, RoutedEventArgs e)
 {
     this.radio_btn_replace_with_new.IsChecked = true;
     contactMode = DuplicateContactMode.REPLACE_WITH_NEW_ITEM;
 }