public void SaveContact()
        {
            CustomerModel contactModel = new CustomerModel();

            List<PhoneNumberVO> numbers = _view.AdditionalContactPhoneList;

            CS_Contact contact = new CS_Contact()
            {
                Attn = _view.ContactAttn,
                Name = _view.ContactName,
                LastName = _view.ContactLastName,
                Alias = _view.ContactAlias,
                Address1 = _view.ContactAddress,
                Address2 = _view.ContactAddress2,
                State = _view.ContactState,
                City = _view.ContactCity,
                Country = _view.ContactCountry,
                Zip = _view.ContactZipcode,
                HomePhoneCodeArea = _view.ContactHomePhoneCodeArea,
                Phone = _view.ContactHomePhone,
                FaxCodeArea = _view.ContactFaxPhoneCodeArea,
                Fax = _view.ContactFaxPhone,
                Email = _view.ContactEmail,
                BillName = _view.ContactBillingName,
                BillAddress1 = _view.ContactBillingAddress,
                BillAddress2 = _view.ContactBillingAddress2,
                BillAttn = _view.ContactBillingAttn,
                BillState = _view.ContactBillingState,
                BillCity = _view.ContactBillingCity,
                BillCountry = _view.ContactBillingCountry,
                BillingHomePhoneCodeArea = _view.ContactBillingHomePhoneCodeArea,
                BillPhone = _view.ContactBillingHomePhone,
                BillFaxCodeArea = _view.ContactBillingFaxPhoneCodeArea,
                BillFax = _view.ContactBillingFaxPhone,
                BillSalutation = _view.ContactBillingSalutation,
                //BillThruProject = _view.ContactBillingThruProject,
                BillZip = _view.ContactBillingZipcode,
                CountryID = 1,
                Webpage = _view.ContactWebpage,
                IMAddress = _view.ContactIMAddress,
                DynamicsContact = _view.ContactType.Value
            };

            if (_view.ContactId.HasValue)
            {
                contact.ID = _view.ContactId.Value;
            }

            _view.SaveMessage = contactModel.SaveContact(_view.ContactCustomerID, contact, numbers, _view.UserName);

            if (_view.NewContact)
                _view.SavedContact = contact;
        }
 private void LoadContactBillinfInfo(CS_Contact selectedContact)
 {
     _view.ContactBillingName = selectedContact.BillName;
     _view.ContactBillingAddress = selectedContact.BillAddress1;
     _view.ContactBillingAddress2 = selectedContact.BillAddress2;
     _view.ContactBillingAttn = selectedContact.BillAttn;
     _view.ContactBillingState = selectedContact.BillState;
     _view.ContactBillingCity = selectedContact.BillCity;
     _view.ContactBillingCountry = selectedContact.BillCountry;
     _view.ContactBillingZipcode = selectedContact.BillZip;
     _view.ContactBillingHomePhoneCodeArea = selectedContact.BillingHomePhoneCodeArea;
     _view.ContactBillingHomePhone = selectedContact.BillingContactPhoneNumber;
     _view.ContactBillingFaxPhoneCodeArea = selectedContact.BillFaxCodeArea;
     _view.ContactBillingFaxPhone = selectedContact.BillingContactFaxPhone;
     _view.ContactBillingSalutation = selectedContact.BillSalutation;
 }
        public string SaveContact(int customerID, CS_Contact contact, List<PhoneNumberVO> numbers, string userName)
        {
            string returnMessage = "The Company Contact Profile saved successfully."; ;

            using (TransactionScope scope = new TransactionScope())
            {
                DateTime processTime = DateTime.Now;
                bool newContact = contact.ID.Equals(0);
                bool createRequest = false;
                string emailBody = string.Empty;

                //CS_Contact Insert/Update
                try
                {
                    if (!newContact)
                    {
                        returnMessage = "The Company Contact Information has been updated.";
                        Globals.CustomerMaintenance.CS_Contact_Comparer compare = new Globals.CustomerMaintenance.CS_Contact_Comparer();
                        CS_Contact oldContact = _contactRepository.Get(e => e.ID == contact.ID);

                        contact.ContactNumber = oldContact.ContactNumber;
                        contact.CheckSum = oldContact.CheckSum;
                        contact.CreatedBy = oldContact.CreatedBy;
                        contact.CreationDate = oldContact.CreationDate;
                        contact.CreationID = oldContact.CreationID;
                        contact.ModifiedBy = userName;
                        contact.ModificationDate = processTime;
                        //contact.ModificationID = ModificationID;
                        contact.Active = true;

                        emailBody = GenerateContactRequestEmailBody(contact, !newContact);
                        createRequest = !compare.Equals(oldContact, contact) && oldContact.DynamicsContact;

                        if (createRequest)
                        {
                            contact.Name = oldContact.Name;
                            contact.LastName = oldContact.LastName;
                            contact.Alias = oldContact.Alias;
                            contact.ContactNumber = oldContact.ContactNumber;
                            contact.Attn = oldContact.Attn;
                            contact.Address1 = oldContact.Address1;
                            contact.Address2 = oldContact.Address2;
                            contact.State = oldContact.State;
                            contact.City = oldContact.City;
                            contact.Country = oldContact.Country;
                            contact.Zip = oldContact.Zip;
                            contact.HomePhoneCodeArea = oldContact.HomePhoneCodeArea;
                            contact.Phone = oldContact.Phone;
                            contact.FaxCodeArea = oldContact.FaxCodeArea;
                            contact.Fax = oldContact.Fax;
                            contact.Email = oldContact.Email;
                            contact.Webpage = oldContact.Webpage;
                            contact.IMAddress = oldContact.IMAddress;
                            contact.DynamicsContact = oldContact.DynamicsContact;
                            contact.BillName = oldContact.BillName;
                            contact.BillAddress1 = oldContact.BillAddress1;
                            contact.BillAddress2 = oldContact.BillAddress2;
                            contact.BillAttn = oldContact.BillAttn;
                            contact.BillState = oldContact.BillState;
                            contact.BillCity = oldContact.BillCity;
                            contact.BillCountry = oldContact.BillCountry;
                            contact.BillZip = oldContact.BillZip;
                            contact.BillingHomePhoneCodeArea = oldContact.BillingHomePhoneCodeArea;
                            contact.BillPhone = oldContact.BillPhone;
                            contact.BillFaxCodeArea = oldContact.BillFaxCodeArea;
                            contact.BillFax = oldContact.BillFax;
                            contact.BillSalutation = oldContact.BillSalutation;
                            contact.BillThruProject = oldContact.BillThruProject;
                        }

                        contact = _contactRepository.Update(contact);
                    }
                    else
                    {
                        contact.CreatedBy = userName;
                        contact.CreationDate = processTime;
                        //contact.CreationID = CreationID;
                        contact.ModifiedBy = userName;
                        contact.ModificationDate = processTime;
                        //contact.ModificationID = ModificationID;
                        contact.Active = true;

                        contact = _contactRepository.Add(contact);

                        //CS_Customer_Contact Insert
                        CS_Customer_Contact customerContact = new CS_Customer_Contact()
                        {
                            CustomerID = customerID,
                            ContactID = contact.ID,
                            CreatedBy = contact.CreatedBy,
                            CreationDate = contact.CreationDate,
                            ModifiedBy = contact.ModifiedBy,
                            ModificationDate = contact.ModificationDate,
                            Active = contact.Active,
                            CreationID = contact.CreationID,
                            ModificationID = contact.ModificationID
                        };

                        _customerContactRepository.Add(customerContact);
                        createRequest = true && contact.DynamicsContact;
                        emailBody = GenerateContactRequestEmailBody(contact, !newContact);
                    }
                }
                catch (Exception ex)
                {
                    Logger.Write(string.Format("An error occured while trying to save contact information.\n{0}\n{1}", ex, ex.InnerException));
                    throw new Exception("Error while trying to save contact information!", ex);
                }

                //CS_Request Insert
                if (createRequest)
                {
                    emailBody = GenerateContactRequestEmailBody(contact, !newContact);

                    SaveNewContactRequest(customerID, contact, ref emailBody);

                    if (newContact)
                        SendContactRequestEmail(emailBody, false, false, null, userName);
                    else
                        SendContactRequestEmail(emailBody, false, false, contact.ContactNumber, userName);

                    returnMessage = "A request has been sent to dynamics to create and/or update the Company Bill-To-Contact information.";
                }

                //CS_PhoneNumber Insert/Update
                try
                {
                    if (null != contact)
                    {
                        List<CS_PhoneNumber> oldPhoneList = new List<CS_PhoneNumber>();

                        if (!newContact)
                            oldPhoneList = ListAllPhonesByEmployee(contact.ID);

                        List<CS_PhoneNumber> newPhoneList = GetListFromPhoneVO(numbers);
                        List<CS_PhoneNumber> removedPhoneList = new List<CS_PhoneNumber>();

                        if (oldPhoneList.Count > 0)
                            removedPhoneList = oldPhoneList.Where(e => !newPhoneList.Any(f => f.ID == e.ID)).ToList();

                        List<CS_PhoneNumber> addedPhoneList = newPhoneList.Where(e => e.ID == 0).ToList();

                        for (int i = 0; i < removedPhoneList.Count; i++)
                        {
                            removedPhoneList[i].ModifiedBy = userName;
                            removedPhoneList[i].ModificationDate = processTime;
                            removedPhoneList[i].Active = false;
                        }

                        for (int i = 0; i < addedPhoneList.Count; i++)
                        {
                            addedPhoneList[i].ContactID = contact.ID;
                            addedPhoneList[i].CreatedBy = userName;
                            addedPhoneList[i].CreationDate = processTime;
                            //addedPhoneList[i].CreationID =
                            addedPhoneList[i].ModifiedBy = userName;
                            addedPhoneList[i].ModificationDate = processTime;
                            //addedPhoneList[i].ModificationID =
                            addedPhoneList[i].Active = true;
                        }

                        _phoneNumberRepository.UpdateList(removedPhoneList);
                        _phoneNumberRepository.AddList(addedPhoneList);
                    }
                }
                catch (Exception ex)
                {
                    Logger.Write(string.Format("An error occured while trying to Update Additional Contact Information.\n{0}\n{1}", ex, ex.InnerException));
                    throw new Exception("Error while updating Additional Contact Information", ex);
                }

                scope.Complete();
            }

            return returnMessage;
        }
        /// <summary>
        /// Generates the email body to be sent for Contact request
        /// </summary>
        /// <param name="contact">Contact information</param>
        /// <param name="isUpdate">Indicates if it's an update or not</param>
        /// <returns>Email Body</returns>
        private string GenerateContactRequestEmailBody(CS_Contact contact, bool isUpdate)
        {
            if (null != contact)
            {
                StringBuilder emailBody = new StringBuilder();

                if (isUpdate)
                    emailBody.Append("<p>A change for an existing Company Contact record has been requested for ");
                else
                    emailBody.Append("<p>A new Company Contact record has been requested for ");
                emailBody.Append(contact.Name);
                if (isUpdate)
                {
                    emailBody.Append(" with a master ID of ");
                    emailBody.Append(contact.ContactNumber);
                    emailBody.Append(" and ");
                }
                emailBody.Append(" with a temporary ID of @@TemporaryID");

                emailBody.Append(" on ");
                emailBody.Append(DateTime.Now.ToString("MM/dd/yyyy"));
                emailBody.Append(" by ");
                emailBody.Append(contact.ModifiedBy);
                emailBody.Append(".</p>");

                emailBody.Append("<p>Please review Company Contact information");
                if (!isUpdate)
                    emailBody.Append(" and determine a master ID should be created in Dynamics.");
                emailBody.Append("</p>");

                StringBuilder contactFormattedData = new StringBuilder();
                contactFormattedData.AppendFormat("Contact Name: <Text>{0}, {1}<BL>", contact.LastName, contact.Name);
                contactFormattedData.Append("Company: <Text>");
                foreach (CS_Customer_Contact customer in contact.CS_Customer_Contact)
                    contactFormattedData.AppendFormat("{0} - {1}<BL>", customer.CS_Customer.CustomerNumber, customer.CS_Customer.Name);
                contactFormattedData.AppendFormat("Salutation: <Text>{0}<BL>", contact.BillSalutation);
                contactFormattedData.AppendFormat("Address Line 1: <Text>{0}<BL>", contact.Address1);
                contactFormattedData.AppendFormat("Address Line 2: <Text>{0}<BL>", contact.Address2);
                contactFormattedData.AppendFormat("City: <Text>{0}<BL>", contact.City);
                contactFormattedData.AppendFormat("State/Province: <Text>{0}<BL>", contact.State);
                contactFormattedData.AppendFormat("Postal Code: <Text>{0}<BL>", contact.Zip);
                contactFormattedData.AppendFormat("Country/Region: <Text>{0}<BL>", contact.Country);
                contactFormattedData.AppendFormat("Phone/Extension: <Text>{0}<BL>", contact.Phone);
                contactFormattedData.AppendFormat("Fax/Extension: <Text>{0}<BL>", contact.Fax);
                contactFormattedData.AppendFormat("Email Address: <Text>{0}<BL>", contact.Email);

                emailBody.Append(StringManipulation.TabulateString(contactFormattedData.ToString()));

                return emailBody.ToString();
            }
            else
                return string.Empty;
        }
        /// <summary>
        /// Generates the cancel email body to be sent for Contact request
        /// </summary>
        /// <param name="contact">Contact information</param>
        /// <param name="isUpdate">Indicates if it's an update or not</param>
        /// <param name="requestDate">Request date</param>
        /// <param name="requestedByUsername">Username that created the request</param>
        /// <returns>Email Body</returns>
        private string GenerateCancelContactRequestEmailBody(CS_Contact contact, bool isUpdate, DateTime requestDate, string requestedByUsername)
        {
            if (null != contact)
            {
                StringBuilder emailBody = new StringBuilder();

                if (isUpdate)
                    emailBody.Append("<p>The request to change am existing Company Contact record for ");
                else
                    emailBody.Append("<p>The request to add a new Company Contact record for ");
                emailBody.AppendFormat("{0}, {1}", contact.LastName, contact.Name);

                if (isUpdate)
                {
                    emailBody.Append(" with a master ID of ");
                    emailBody.Append(contact.ContactNumber);
                }
                else
                {
                    emailBody.Append(" with a temporary ID of ");
                    emailBody.Append(contact.ID);
                }
                emailBody.Append(" on ");
                emailBody.Append(requestDate.ToString("MM/dd/yyyy"));
                emailBody.Append(" by ");
                emailBody.Append(requestedByUsername);
                emailBody.Append(" Has been cancelled. Please disregard request.</p>");

                return emailBody.ToString();
            }
            else
                return string.Empty;
        }
        public void SaveNewContactRequest(int customerID, CS_Contact newContact, ref string note)
        {
            try
            {
                CS_Request request = new CS_Request()
                {
                    CustomerID = customerID,
                    ContactID = newContact.ID,
                    RequestDate = DateTime.Now,
                    Note = note,
                    Status = (int)Globals.CustomerMaintenance.RequestStatus.Pending,
                    ApprovedDate = null,
                    IsCustomer = false,
                    CreatedBy = newContact.ModifiedBy,
                    CreationDate = newContact.ModificationDate,
                    CreationID = newContact.ModificationID,
                    ModifiedBy = newContact.ModifiedBy,
                    ModificationDate = newContact.ModificationDate,
                    ModificationID = newContact.ModificationID,
                    Active = true
                };

                _requestRepository.Add(request);

                note = note.Replace("@@TemporaryID", newContact.ID + "-" + request.ID);
            }
            catch (Exception ex)
            {
                Logger.Write(string.Format("An error occured while trying to save contact request information.\n{0}\n{1}", ex, ex.InnerException));
                throw new Exception("Error while trying to save contact request information!", ex);
            }
        }
 void uscCustomer_CustomerContactChanged(CS_Contact customerContactEntity)
 {
     uscJobInfo.DivisionFromExternalSource = null;
 }