Example #1
0
        /// <summary>
        /// Read from csv file line by line.
        /// </summary>
        /// <param name="path">Path to csv file.</param>
        /// <returns>Number of failed lines.</returns>
        public static int ImportFile(string path)
        {
            MessageSender.SendReport(">> Importing file: " + path + Environment.NewLine);
            int countNewContacts     = 0;
            int countUpdatedContacts = 0;
            int lineNumber           = 0;

            //read from file
            using (StreamReader file = new StreamReader(path))
            {
                // skip header line
                string line = file.ReadLine();
                while ((line = file.ReadLine()) != null)
                {
                    lineNumber++;
                    string[] items = line.Split('\t');
                    //check if line contains right amount of items
                    if (items.Length < 5 || items.Length > 7)
                    {
                        MessageSender.SendReport("Line " + lineNumber + ": Invalid number of items." + Environment.NewLine);
                        continue;
                    }
                    //parse line to contact data transfer object
                    ContactDTO contact = ParseLineToContactDTO(items, lineNumber);
                    if (contact == null)
                    {
                        //parsing failed
                        continue;
                    }
                    if (ContactValidator.ValidateContact(contact, lineNumber))
                    {
                        if (ContactToDbFeeder.LineToDbFeed(contact) == true)
                        {
                            countNewContacts++;
                        }
                        else
                        {
                            countUpdatedContacts++;
                        }
                    }
                }
            }
            MessageSender.SendReport("Succesfully added " + countNewContacts + " contacts." + Environment.NewLine);
            MessageSender.SendReport("Succesfully updated " + countUpdatedContacts + " contacts." + Environment.NewLine);
            return(lineNumber - (countNewContacts + countUpdatedContacts));
        }
Example #2
0
        /// <summary>
        /// Decide if contact will be added as new or update exisiting contact.
        /// </summary>
        /// <param name="newContact">Contact data tranfer object.</param>
        /// <returns>True if contact was added as new, else false.</returns>
        public static bool LineToDbFeed(ContactDTO newContact)
        {
            //check if birth number is not null and already exists in databse
            DbContactsEntities database = new DbContactsEntities();

            if (newContact.BirthNumber != null && database.Persons.Any(person => person.BirthNumber == newContact.BirthNumber))
            {
                //update contact
                DbUpdateContact(newContact, database);
                return(false);
            }
            else
            {
                //add new contact
                DbAddContact(newContact, database);
                return(true);
            }
        }
Example #3
0
 /// <summary>
 /// Update existing contact in database.
 /// </summary>
 /// <param name="newContact">Contact data transfer object.</param>
 /// <param name="database">Database of contact entities.</param>
 private static void DbUpdateContact(ContactDTO newContact, DbContactsEntities database)
 {
     try
     {
         //find existing contact
         Person existingPerson = database.Persons.First(p => p.BirthNumber == newContact.BirthNumber);
         //update informations
         existingPerson.Name    = newContact.Name;
         existingPerson.Surname = newContact.Surname;
         existingPerson.Address = newContact.Address;
         //update phone numbers
         for (int i = 0; i < newContact.PhoneNumbers.Length; i++)
         {
             existingPerson.PhoneNumbers.ElementAt(i).PNumber = newContact.PhoneNumbers[i];
         }
         database.SaveChanges();
     } catch (Exception ex)
     {
         MessageSender.SendReport(ex.ToString());
     }
 }
Example #4
0
        /// <summary>
        /// Base method for validating each property of contact;
        /// </summary>
        /// <param name="contact">Contact data tranfer object.</param>
        /// <param name="lineNumber">Line number in the source csv.</param>
        /// <returns>True if contact is valid, else false.</returns>
        public static bool ValidateContact(ContactDTO contact, int lineNumber)
        {
            ContactValidity = true;
            LineNumber      = lineNumber;
            //check if required Surname is present
            if (contact.Surname == "")
            {
                MessageSender.SendReport("Line " + lineNumber + ": Surname is missing. Line failed to import." + Environment.NewLine);
                return(false);
            }

            ValidateTextItem(contact.Name, 100, "Name");
            ValidateTextItem(contact.Surname, 100, "Surname");
            ValidateBirthNumber(contact.BirthNumber);
            ValidateTextItem(contact.Address, 255, "Address");

            //validate all phone numbers
            foreach (int?number in contact.PhoneNumbers)
            {
                ValidatePhoneNumber(number);
            }
            return(ContactValidity);
        }