This account has been disabled customer error

A forum where issues related to the DataPort utility can be discussed.
Post Reply
sullivan
Ensign (ENS)
Ensign (ENS)
Posts: 7
Joined: Wed Dec 17, 2008 4:18 pm

This account has been disabled customer error

Post by sullivan » Mon Mar 02, 2009 4:15 pm

Hey all,

I just migrated our online store from AbleCommerce 5.5 ASP.NET to Ablecommerce 7.0.

I imported all of the records using dataport/client tools and now my old customers can't seem to login.

They get the following error "This account has been disabled."

I know that in the help.ablecommerce.com migration section it says "In earlier versions of AbleCommerce, the username field was not required to be an email address. In version 7, the username field must be an email address, however, to retain backwards compatibility, there are still separate fields in the database for email and username. Upon import, if you have usernames that are not email addresses, everything will still work as before. If a user attempts to checkout with a non-email username, the program will prompt him or her to enter a valid username (email) before continuing checkout. Also, when an existing user record is updated, the program validates the username and will prompt for an email address instead. "

... however it never gets to the step where it asks for an email address.

So I logged in as admin and looked at the info for one of the users having an issue. the account did not show as disabled and the username was in-fact an email address.

- I tried updating the password, no go.
- I tried disabling the account, submitting the changes then re-enabling the account, but still not go.

Has anyone had these issues when migrating from ablecommerce 5.5? Any help would be appreciated.

Thanks

User avatar
jmestep
AbleCommerce Angel
Posts: 8164
Joined: Sun Feb 29, 2004 8:04 pm
Location: Dayton, OH
Contact:

Re: This account has been disabled customer error

Post by jmestep » Mon Mar 02, 2009 6:19 pm

I've done a couple of migrations and no one has reported a problem.
Judy Estep
Web Developer
jestep@web2market.com
http://www.web2market.com
708-653-3100 x209
New search report plugin for business intelligence:
http://www.web2market.com/Search-Report ... -P154.aspx

User avatar
Naveed
Rear Admiral (RADM)
Rear Admiral (RADM)
Posts: 611
Joined: Thu Apr 03, 2008 4:48 am

Re: This account has been disabled customer error

Post by Naveed » Tue Mar 03, 2009 6:09 am

There was a similar problem for an earlier version of DataPort. Which version you are using? DataPort vs. 7.0.34 is the latest available and is compatible for 7.0 stores.

Please post your store version, and list and version of dll files in your bin directory. You can find this information from "Admin -> Help -> About AbleCommerce" page.

User avatar
mazhar
Master Yoda
Master Yoda
Posts: 5084
Joined: Wed Jul 09, 2008 8:21 am
Contact:

Re: This account has been disabled customer error

Post by mazhar » Tue Mar 03, 2009 6:11 am

Please post DataPort related questions in DataPort forum.

sullivan
Ensign (ENS)
Ensign (ENS)
Posts: 7
Joined: Wed Dec 17, 2008 4:18 pm

Re: This account has been disabled customer error

Post by sullivan » Tue Mar 03, 2009 8:11 am

Dataport version 1.0.0.31

PLATFORM: ASP.NET
VERSION: 7.0
BUILD: 10125

AjaxControlToolkit: 1.0.10301.0
CommerceBuilder: 7.0.10110.0
CommerceBuilder.AuthorizeNet: 7.0.9764.0
CommerceBuilder.CanadaPost: 7.0.0.0
CommerceBuilder.CCH: 7.0.0.0
CommerceBuilder.Configuration: 7.0.10102.0
CommerceBuilder.CyberSource: 7.0.9764.0
CommerceBuilder.DataClient.Api: 1.0.0.31
CommerceBuilder.DataClient.Csv: 7.0.34.0
CommerceBuilder.DHL: 7.0.8825.0
CommerceBuilder.ECB: 7.0.0.0
CommerceBuilder.FedEx: 7.0.9725.0
CommerceBuilder.FRBNY: 7.0.0.0
CommerceBuilder.GoogleCheckout: 7.0.10052.0
CommerceBuilder.InternetSecure: 7.0.9764.0
CommerceBuilder.LinkPoint: 7.0.9764.0
CommerceBuilder.Paradata: 7.0.9764.0
CommerceBuilder.PayFlowPro: 7.0.10061.0
CommerceBuilder.PayJunction: 7.0.9764.0
CommerceBuilder.PayPal: 7.0.10071.0
CommerceBuilder.Services: 7.0.9733.0
CommerceBuilder.SkipJack: 7.0.9764.0
CommerceBuilder.UPS: 7.0.10041.0
CommerceBuilder.USPS: 7.0.9728.0
CommerceBuilder.Web: 7.0.9777.0
ComponentArt.Web.UI: 2007.1.1566.3
CyberSource.Base: 2.0.0.0
CyberSource.Clients: 5.0.2.0
CyberSource.Clients.XmlSerializers: 5.0.2.0
CyberSource.WSSecurity: 2.0.0.0
CybsWSSecurityIOP: 1.0.0.0
edtFTPnet: 1.2.4.0
FredCK.FCKeditorV2: 2.5.2912.21007
ICSharpCode.SharpZipLib: 0.85.1.271
LinkPointTransaction: 1.0.1797.29766
log4net: 1.2.10.0
Microsoft.Practices.EnterpriseLibrary.Common: 2.0.0.0
Microsoft.Practices.EnterpriseLibrary.Data: 2.0.0.0
Microsoft.Practices.ObjectBuilder: 1.0.51205.0
Microsoft.Web.Preview: 1.2.61025.0
NVelocity: 7.0.8530.0
PaygatewayNET: 3.0.0.0
paypal_base: 4.2.1.0
PFProCOMLib: 1.0.0.0
PFProdotNET: 0.0.0.0
Validators: 1.0.0.0
WebChart: 1.1.1.6
wwHoverPanel: 1.85.0.0

Any info that you may have will be appreciated.

Thanks

User avatar
Naveed
Rear Admiral (RADM)
Rear Admiral (RADM)
Posts: 611
Joined: Thu Apr 03, 2008 4:48 am

Re: This account has been disabled customer error

Post by Naveed » Tue Mar 03, 2009 8:26 am

Please update your store to 7.0 SR3 and use latest version of DataPort 7.0.34. You can find "AbleCommerce 7.0.0 Service Release 3" at:
http://help.ablecommerce.com/upgrades/A ... ease_3.htm

And latest version of DataPort can be downloaded from:
viewtopic.php?f=61&t=5707

sullivan
Ensign (ENS)
Ensign (ENS)
Posts: 7
Joined: Wed Dec 17, 2008 4:18 pm

Re: This account has been disabled customer error

Post by sullivan » Tue Mar 03, 2009 9:32 am

Is there anything I can do or change in the database table to fix this for specific customers?

Here's my a run-down of my issue:
- We imported all of our information from store 5.5 to 7.0 on ablecommerce managed dedicated hosting servers. This was done back in January. I remember that we had to get the store re-installed to 7.0 because there wasn't a compatibly dataport utility for 7.1.

- We just launched the store last week. When propagation was complete we backed up the old store with AbleCommerce Store Export. But now none of our previous customers can access the store.

- I've gone through the xml file and separated all of the fields into different files. (the file is 400 mb: about 11 million lines in the xml and will timeout if I try to import the whole thing with dataport)

-before i import the rest of the records (any users/orders/transactions/products between last backup in January and the last order on the old server) I want to ensure that the rest of the users don't have any issues.

1) When the admins do the upgrade is there any issues I would worry about with the functionality of the store?
2) Can anything be done with the current users that are already in the system. (I think we have about 80,000 users all together since 2004)?
3) If not, when I import the records again, will it simply overwrite these records that I've already imported?
4) In the new ablecommerce, I've set the auto increment of the new orders to have the order_number increased by 500 so that any previous orders will not be overwritten. The problem that I see here is that there was no way to increase the transaction number or the order number on the new store. So there may be duplicate order numbers and transaction numbers which may cause some problems. Do you have any insights on this.

Sorry about the long complex post, but there is some history to all this and the store is now live and I didn't anticipate any issues like this. We are past the point of no return with the old hosting company, so I want to be 100% sure that there won't be any issues with the store if I go through the process of re-importing the system.

Any info is appreciated!

User avatar
mazhar
Master Yoda
Master Yoda
Posts: 5084
Joined: Wed Jul 09, 2008 8:21 am
Contact:

Re: This account has been disabled customer error

Post by mazhar » Tue Mar 03, 2009 11:41 am

You can run this code to enable all disabled users on store

Code: Select all

UserCollection users = UserDataSource.LoadForStore();
        foreach (User user in users)
        {
            if (!user.IsApproved)
            {
                user.IsApproved = true;
                user.Save();
            }
        }

User avatar
Naveed
Rear Admiral (RADM)
Rear Admiral (RADM)
Posts: 611
Joined: Thu Apr 03, 2008 4:48 am

Re: This account has been disabled customer error

Post by Naveed » Tue Mar 03, 2009 12:35 pm

Your issue is a complicated one, I will try to answer all the issues you mentioned.
sullivan wrote:Is there anything I can do or change in the database table to fix this for specific customers?
Mazhar has already posted a solution. You can run the above code by creating a new aspx file preferably on admin side.
sullivan wrote: Here's my a run-down of my issue:
- We imported all of our information from store 5.5 to 7.0 on ablecommerce managed dedicated hosting servers. This was done back in January. I remember that we had to get the store re-installed to 7.0 because there wasn't a compatibly dataport utility for 7.1.

- We just launched the store last week. When propagation was complete we backed up the old store with AbleCommerce Store Export. But now none of our previous customers can access the store.
We always recommend to take database backup before using DataPort utility. This is because sometimes the results may differ from the expectations. There are certain pre-requisites before migrating from AC55 to AC7. You can find a complete manual/guide at:
http://help.ablecommerce.com/upgrades/A ... erce_7.htm
sullivan wrote: - I've gone through the xml file and separated all of the fields into different files. (the file is 400 mb: about 11 million lines in the xml and will timeout if I try to import the whole thing with dataport)
DataPort utility is designed and implemented in such a way that it can process and import very very large files efficiently. You can even import GB's of data with it without timeout and out of memory errors. For this it splits the large files into smaller parts automatically and can then merge and link the data back in a proper seamless way. You will never need to split the file manually other wise it will not be possible to link different type of data with each other.

I mean if you will split users and orders in different files manually and then import those separately then the users will not be linked to respective orders. However for this you can trust on DataPort.
sullivan wrote: -before i import the rest of the records (any users/orders/transactions/products between last backup in January and the last order on the old server) I want to ensure that the rest of the users don't have any issues.

1) When the admins do the upgrade is there any issues I would worry about with the functionality of the store?.
.
.
.
Any info is appreciated!
It is difficult to understand what situation you are facing. However here are few guidelines:

1. If your new store is now running properly and you have no other problem with it except the above mentioned disabled user accounts. Then it is better to apply the solution as mentioned by Mazhar. However if there are about 80,000 users the above solution may lead to out of memory error. Alternately you can run the following sql query on your database manually:

Code: Select all

/* ENABLE AND APPROVE ALL USERS */
UPDATE ac_Users SET IsApproved = 1 WHERE IsApproved = 0
GO

UPDATE ac_Users SET IsLockedOut = 1 WHERE IsLockedOut = 0
GO
2. If there is still some more data from your old store needs to be imported to your new store, then if possible try to re-install your new store and import all data from single file. This will ensure the data integrity. I am not sure how much this is feasible for you.

sullivan
Ensign (ENS)
Ensign (ENS)
Posts: 7
Joined: Wed Dec 17, 2008 4:18 pm

Re: This account has been disabled customer error

Post by sullivan » Tue Mar 03, 2009 3:49 pm

Thanks for the thorough replies.

so here is where I am now.

LoginDialog.ascx.cs was updattd to look like this:

Code: Select all

    protected void LoginButton_Click(object sender, EventArgs e)
    {
        User loginUser = UserDataSource.LoadForUserName(UserName.Text);
        if (loginUser != null)
        {
            bool stillNeedsCaptcha = false;
            if ((loginUser.IsAdmin) && (!trCaptchaField.Visible))
            {
                stillNeedsCaptcha = (new MerchantPasswordPolicy()).ImageCaptcha;
            }
            if (!stillNeedsCaptcha)
            {
                //EITHER THIS IS NOT AN ADMIN USER, OR THE CAPTCHA IS ALREADY VISIBLE
                if ((!trCaptchaField.Visible) || (CaptchaImage.Authenticate(CaptchaInput.Text)))
                {
                    //CAPTCHA IS HIDDEN OR VALIDATED, PROCEED WITH LOGIN ATTEMPT
                    if (User.Login(UserName.Text, Password.Text))
                    {
					
						//ADDED THIS CODE TO MIGRATE OLD USERS.
						UserCollection users = UserDataSource.LoadForStore();
						foreach (User user in users)
						{
							if (!user.IsApproved)
							{
								user.IsApproved = true;
								user.Save();
							}
						}
						//ADDED THIS CODE TO MIGRATE OLD USERS.
					
                        //LOGIN SUCCEEDED, MIGRATE USER IF NEEDED
                        int newUserId = loginUser.UserId;
                        int oldUserId = Token.Instance.UserId;
                        if ((oldUserId != newUserId) && (newUserId != 0))
                        {
                            User.Migrate(Token.Instance.User, UserDataSource.Load(newUserId));
                            Token.Instance.UserId = newUserId;
                        }
                        //HANDLE LOGIN PROCESSING
                        if (trRememberMe.Visible && RememberUserName.Checked)
                        {
                            HttpCookie cookie = new HttpCookie("UserName", UserName.Text);
                            cookie.Expires = DateTime.MaxValue;
                            Response.Cookies.Add(cookie);
                        }
                        else
                        {
                            Response.Cookies.Add(new HttpCookie("UserName", ""));
                        }
                        //CHECK FOR EXPIRED PASSWORDS
                        PasswordPolicy policy;
                        if (loginUser.IsAdmin) policy = new MerchantPasswordPolicy();
                        else policy = new CustomerPasswordPolicy();
                        if (policy.IsPasswordExpired(loginUser))
                        {
                            ShowPasswordExpired(policy, loginUser);
                        }
                        else
                        {
                            //REDIRECT TO THE STANDARD PAGE
                            FormsAuthentication.RedirectFromLoginPage(UserName.Text, false);
                        }
                    }
                    else
                    {
                        if (loginUser != null)
                        {
                            if (!loginUser.IsApproved)
                            {
                                AccountDisabled.IsValid = false;
                            }
                            else
                            {
                                PasswordPolicy policy;
                                if (loginUser.IsAdmin) policy = new MerchantPasswordPolicy();
                                else policy = new CustomerPasswordPolicy();
                                int remainingTries = policy.MaxAttempts - loginUser.FailedPasswordAttemptCount;
                                if (remainingTries > 0)
                                {
                                    InvalidLogin.ErrorMessage += " You have {0} tries remaining.";
                                    InvalidLogin.ErrorMessage = String.Format(InvalidLogin.ErrorMessage, remainingTries);
                                    InvalidLogin.IsValid = false;
                                }
                                else
                                {
                                    AccountLocked.ErrorMessage = String.Format(AccountLocked.ErrorMessage, policy.LockoutPeriod);
                                    AccountLocked.IsValid = false;
                                }
                            }
                        }
                        else
                        {
                            InvalidLogin.IsValid = false;
                        }
                    }
                }
                else
                {
                    //CAPTCHA IS VISIBLE AND DID NOT AUTHENTICATE
                    CustomValidator invalidInput = new CustomValidator();
                    invalidInput.ValidationGroup = "Login";
                    invalidInput.Text = "*";
                    invalidInput.ErrorMessage = "You did not input the verification number correctly.";
                    invalidInput.IsValid = false;
                    phCaptchaValidators.Controls.Add(invalidInput);
					CaptchaInput.Text = "";
                    Password.Attributes.Add("value", string.Empty);
                    RefreshCaptcha();
                }
            }
            else
            {
                //THIS IS AN ADMIN USER AND CAPTCHA IS NOT DISPLAYED YET
                trCaptchaField.Visible = true;
                trCaptchaImage.Visible = true;
                trRememberMe.Visible = _EnableAdminRememberMe;
                CaptchaImage.ChallengeText = StringHelper.RandomNumber(6);
                CustomValidator needsCaptcha = new CustomValidator();
                needsCaptcha.ValidationGroup = "Login";
                needsCaptcha.Text = "*";
                needsCaptcha.ErrorMessage = "Please type the verification number to log in.";
                needsCaptcha.IsValid = false;
                phCaptchaValidators.Controls.Add(needsCaptcha);
                Password.Attributes.Add("value", Password.Text);
            }
        }
        else
        {
            //THIS IS AN INVALID USER NAME
            InvalidLogin.IsValid = false;
        }
    }
but for some reason, it still gives me an error.

I'd love to go into the DB and update the actual records myself, but I've been having numerous issues with access to the DB using sql server management studio, right now and waiting for the support to get me access back in.
Once I have access I will definitely run the statement and update all records to be enabled.

As for the dataport stuff, when trying to import my 400 mb file, the program always gave me this error:
Exception of type 'System.OutOfMemoryException' was thrown.

and I was advised that the file was too big.

so I went into the XML file and took out all xml records of orders since it was the largest. The I imported the entire database minus the orders, and added parts of the orders to the XML while uploading.

Basically I used an XML file something like this and added the users underneath the log settings:

<?xml version="1.0" encoding="utf-8"?>
<AbleCommerceExport>
<ExportVersion>5.5</ExportVersion>
<ExportPlatform>VBCLIENT</ExportPlatform>
<ExportBuildNumber>0</ExportBuildNumber>
<SourceVersion>5.2</SourceVersion>
<SourcePlatform>ASPNET</SourcePlatform>
<SourceBuildNumber>1137</SourceBuildNumber>
<Stores>
<Store ID="1">
<Name>SullivanUS</Name>
<StoreSURL>https%3a%2f%2fwww.sullivanboutique.com%2fAnne%2fstores%2f1%2f</StoreSURL>
<AdminSURL>https%3a%2f%2fwww.sullivanboutique.com%2fAnne%2fadmin%2f</AdminSURL>
<HomePage>index.aspx</HomePage>
<LoginPage>login.aspx</LoginPage>
<ErrorPage>error.aspx</ErrorPage>
<Theme>themes%2fBasic+Boutique.thc</Theme>
<DefaultCurrency_ID>1</DefaultCurrency_ID>
<DefaultWarehouse_ID>1</DefaultWarehouse_ID>
<DateFormat>mm%2fdd%2fyyyy</DateFormat>
<TimeFormat>h%3ann+tt</TimeFormat>
<WeightUnit>gm</WeightUnit>
<DimUnit>cm</DimUnit>
<EnableInventory>1</EnableInventory>
<Active>1</Active>
<Logging>0</Logging>
<OrderNumber>114600</OrderNumber>
<DiscountMode>0</DiscountMode>
<CustomFields>AnonLifespan%3d1%26PaymentLifespan%3d0</CustomFields>
<LogSettings>
<Maintenance>0</Maintenance>
<SizeLimit>5000</SizeLimit>
<Buffer>3000</Buffer>
<ReportDir>D%3a%5cInetpub%5cservers%5csullivan2%5cweb%5cAble%5cAnne%5cwebshare%5cstores%5c1%5clogs%5c</ReportDir>
<ReportURL>http%3a%2f%2fwww.sullivanboutique.com%2fstores%2f1%2flogs%2f</ReportURL>
<ArchiveDir>d%3a%5cInetpub%5cservers%5csullivan2%5cweb%5cAble%5cAnne%5cwebshare%5cstores%5c1%5clogs%5c</ArchiveDir>
</LogSettings>


THE INFO FOR THE USERS WENT HERE SECTION!


</Store>
</Stores>
</AbleCommerceExport>

That seemed to work when importing without getting the memory error.

I will try this again, I guess my only question is what info can I use when importing the missing info into the database?
Sorry if I'm not being clear :shock:

can I use something like the following when importing?
<?xml version="1.0" encoding="utf-8"?>
<AbleCommerceExport>
<ExportVersion>5.5</ExportVersion>
<ExportPlatform>VBCLIENT</ExportPlatform>
<ExportBuildNumber>0</ExportBuildNumber>
<SourceVersion>5.2</SourceVersion>
<SourcePlatform>ASPNET</SourcePlatform>
<SourceBuildNumber>1137</SourceBuildNumber>
<Stores>
<Store ID="1">

USER/TRANSACTION/ORDER RECORDS CAN GO HERE....

</Store>
</Stores>
</AbleCommerceExport>

I guess the only way to know is to try, but I don't really want to mess with the import and over write my current settings and have the store go down :wink:

Did I make all of this extra trouble for myself when I started tearing apart the XML file? :(

Thanks for your diligence and patience!

User avatar
Naveed
Rear Admiral (RADM)
Rear Admiral (RADM)
Posts: 611
Joined: Thu Apr 03, 2008 4:48 am

Re: This account has been disabled customer error

Post by Naveed » Wed Mar 04, 2009 7:11 am

It is very strange it DataPort is giving OutOfMemory error, and you are able to manually process that big xml file on same system.

Regarding the code snippet provided by Mazhar, what error it is giving? Is it also related to OutOfMemory? If so, here is an updated code which will load 1000 users each go and update all users in a loop:

Code: Select all

protected void ApproveAllUsers()
    {
        int userCount = UserDataSource.CountForStore();
        int maxRecords = 1000; // RECORDS THAT WILL BE PROCESSED EACH TIME
        int startIndex = 0;
        int loopCount = (int)((userCount / maxRecords) + 1);
        for (int i = 0; i < loopCount; i++)
        {
            // FOR LAST STEP OF LOOP
            if (i == (loopCount - 1)) maxRecords = userCount - startIndex;

            UserCollection users = UserDataSource.LoadForStore(maxRecords, startIndex);
            foreach (User user in users)
            {
                if (!user.IsApproved)
                {
                    user.IsApproved = true;
                    user.IsLockedOut = false;
                    user.Save();
                }
            }

            // INCREMENT START INDEX
            startIndex += maxRecords;
        }
    }

Also I have posted a SQL script. I noticed a mistake in it. Here is the corrected one:

Code: Select all

/* ENABLE AND APPROVE ALL USERS */
UPDATE ac_Users SET IsApproved = 1 WHERE IsApproved = 0
GO

UPDATE ac_Users SET IsLockedOut = 0 WHERE IsLockedOut = 1
GO
Actually we need to set IsLockedOut to "false".

sullivan
Ensign (ENS)
Ensign (ENS)
Posts: 7
Joined: Wed Dec 17, 2008 4:18 pm

Re: This account has been disabled customer error

Post by sullivan » Wed Mar 04, 2009 8:39 am

Hi,

The out of memory was the primary issue when we were initially importing the database. I remember trying this many times for almost a week trying to get it to work, but the memory exception was always there.

So I opened up the XML file in textpad (text/code editing software) and decided to take out all of the users:

<Users>
<User ID="1">
..... user info
</User>
.... user 2, user 3, etc.....

</Users>

Then I created a new file with the store info and added users 1 - 10000 for example and it allowed me to import without the exception. So I went through the process of adding the record 10,000 at a time.

Now I need to import the rest of the records from jan to feb 26 with any records that were added while we were working on the new store on the test environment.

For the rest of the records I will need to have imported, I think I will ask support to create a new test account for me so that I can try importing all of my information again and see if it will give my any issues. I can update this post with my info in case anyone else is having these issues.

****************************

As for the second part with the members disabled, the code that I added was in the LoginDialog.ascx.cs file and it was supposed to check for the username/password first, the check if the user is disabled and enable them.
The error was the same, "This account has been disabled." So I

The code that you have provided that will loop through all users 1000 at a time, where do I input that and where would I execute it?
Should I just create a new file and execute it separately?

User avatar
Naveed
Rear Admiral (RADM)
Rear Admiral (RADM)
Posts: 611
Joined: Thu Apr 03, 2008 4:48 am

Re: This account has been disabled customer error

Post by Naveed » Wed Mar 04, 2009 9:37 am

sullivan wrote: The code that you have provided that will loop through all users 1000 at a time, where do I input that and where would I execute it?
Should I just create a new file and execute it separately?
You can either remove the method signature and use the inline code to place where you want. Or alternately you can place the new method inside the file and place a ApproveAllUsers() method call where you want, may be inside LoginButton_Click().

Post Reply