public IWebshipAccount Create(AccountsCreationRequest data)
        {
            var webacct = new WebshipAccount();

            Mapper.Reset();
            Mapper.CreateMap <AccountsCreationRequest, WebshipAccount>()
            .ForMember(dest => dest.UserFirstName, opt => opt.MapFrom(src => src.RequesterFirstName))
            .ForMember(dest => dest.UserLastName, opt => opt.MapFrom(src => src.RequesterLastName))
            .ForMember(dest => dest.UserEmail, opt => opt.MapFrom(src => src.RequesterEmail))
            .ForMember(dest => dest.CompanyAddress1, opt => opt.MapFrom(src => src.CompanyPhyAddress1))
            .ForMember(dest => dest.CompanyAddress2, opt => opt.MapFrom(src => src.CompanyPhyAddress2))
            .ForMember(dest => dest.CompanyCity, opt => opt.MapFrom(src => src.CompanyPhyCity))
            .ForMember(dest => dest.CompanyState, opt => opt.MapFrom(src => src.CompanyPhyState))
            .ForMember(dest => dest.CompanyZip, opt => opt.MapFrom(src => src.CompanyPhyZip))
            .ForMember(dest => dest.UID, opt => opt.Ignore())
            .ForMember(dest => dest.Administrator, opt => opt.Ignore())
            .ForMember(dest => dest.CustID, opt => opt.Ignore())
            .ForMember(dest => dest.LastLoginDate, opt => opt.Ignore())
            .ForMember(dest => dest.LoginsToDate, opt => opt.Ignore())
            .ForMember(dest => dest.LoginAttemptsToday, opt => opt.Ignore())
            .ForMember(dest => dest.LoginFailedToday, opt => opt.Ignore())
            .ForMember(dest => dest.PWDChangedLast, opt => opt.Ignore())
            .ForMember(dest => dest.PWDResentLast, opt => opt.Ignore())
            .ForMember(dest => dest.PWDResentCount, opt => opt.Ignore())
            .ForMember(dest => dest.PWDResentToday, opt => opt.Ignore())
            .ForMember(dest => dest.ABEntryToday, opt => opt.Ignore())
            .ForMember(dest => dest.CreatedBy, opt => opt.Ignore())
            .ForMember(dest => dest.CreateDate, opt => opt.Ignore())
            .ForMember(dest => dest.AccountLockout, opt => opt.Ignore())
            .ForMember(dest => dest.PrintToLabel, opt => opt.Ignore())
            .ForMember(dest => dest.DefaultService, opt => opt.Ignore())
            .ForMember(dest => dest.BillingRefRequired, opt => opt.Ignore())
            .ForMember(dest => dest.EmailPOD, opt => opt.Ignore())
            .ForMember(dest => dest.SuperWebShipper, opt => opt.Ignore())
            .ForMember(dest => dest.UseLocBillingRef, opt => opt.Ignore())
            .ForMember(dest => dest.HandlingFee, opt => opt.Ignore())
            .ForMember(dest => dest.PrintPublishedRates, opt => opt.Ignore())
            .ForMember(dest => dest.IsUserAdmin, opt => opt.Ignore())
            .ForMember(dest => dest.Active, opt => opt.Ignore())
            .ForMember(dest => dest.ShowOnlyUserShipments, opt => opt.Ignore())
            .ForMember(dest => dest.DisableBillingReferenceRequired, opt => opt.Ignore())
            .ForMember(dest => dest.HardCodeBillingRef, opt => opt.Ignore())
            .ForMember(dest => dest.HardCodedBillingRefValue, opt => opt.Ignore())
            .ForMember(dest => dest.HardCodeBillingRef2, opt => opt.Ignore())
            .ForMember(dest => dest.HardCodedBillingRefValue2, opt => opt.Ignore())
            .ForMember(dest => dest.newCustomerReferralSourceID, opt => opt.Ignore())
            .ForMember(dest => dest.ActivityNotes, opt => opt.Ignore());

            webacct.AllowAutomapExceptions = true;
            Mapper.Map <AccountsCreationRequest, WebshipAccount>(data, webacct);
            Mapper.AssertConfigurationIsValid();
            webacct.AllowAutomapExceptions = false;

            return(webacct);
        }
        // Set sensible defaults that identify accounts
        // as being created by an automated process, etc
        // Uses change properties to prevent overwriting filled in data
        public void SetDefaults(WebshipAccount item)
        {
            // TODO: Read this from XML or from the database

            // Program defaults
            if (!item.ChangedProperties.ContainsKey("CreateDate"))
            {
                item.CreateDate = DateTime.Now;
            }
            if (!item.ChangedProperties.ContainsKey("CreatedBy"))
            {
                item.CreatedBy = -1;
            }
            if (!item.ChangedProperties.ContainsKey("Active"))
            {
                item.Active = true;
            }
        }
        // Creates a webshipaccount from the LINQtoSQL data class
        public IWebshipAccount Create(UserProfile data)
        {
            Mapper.CreateMap <UserProfile, WebshipAccount>();
            var retval = new WebshipAccount();

            // TODO: This needs to be changed into a more general way of checking the object
            retval.AllowAutomapExceptions = true;
            Mapper.Map <UserProfile, WebshipAccount>(data, retval);
            Mapper.AssertConfigurationIsValid();

            retval.AllowAutomapExceptions = false;

            // save the LINQ to SQL object into this domain object to make updates easier
            retval.CreatedFrom = data;

            // reset change tracking
            retval.AcceptChanges();

            return(retval);
        }